home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-01-28 | 195.4 KB | 5,544 lines |
- NVDI 3 Programmer's Guide
- =========================
-
- Stand: 22.1.95 (vorläufige Fassung)
-
- (c) 1995 by Wilfried Behne
-
- Intentionen, Konditionen, Ovationen
- -----------------------------------
-
- "Neue Version - neue Fragen" - mit dem Erscheinen von NVDI 3 ist die
- Anzahl der Anfragen zu NVDI bei mir rapide gestiegen. Zum Teil waren es
- NVDI-Besitzer, die an weitergehenden Informationen interessiert waren, zum
- Teil aber auch Programmierer, die NVDI nicht besitzen und ihre Programme
- an NVDI anpassen wollten.
-
- Diese vorläufige Funktionsbeschreibung zu NVDI 3 ist ist in die Teile
-
- - Datentypen und Strukturen
- - Versionsabfragen
- - Funktionsumfang
- - Gerätetreiber und Offscreen-Bitmaps
- - Farbeinstellungen
- - Verknüpfung und Zeichenbereich
- - Linien und nicht gefüllte Grafikprimitive
- - Gefüllte Grafikprimitive
- - Marker
- - Textausgaben mit Bitmap- und Vektorfonts
- - Rasterfunktionen
- - Eingabefunktionen
- - Textmodus und VT52
- - Beispiele für Bindings
-
- gegliedert. Für die Vollständigkeit und Richtigkeit der gemachten Angaben wird
- keinerlei Gewähr übernommen.
-
- Konditionen
- -----------
-
- Diese Dokumentation ist Public Domain, d.h. sie darf frei kopiert und benutzt
- werden. Der entgeldliche Vertrieb ist untersagt. Zuwiderhandlungen werden
- strafrechtlich verfolgt.
-
- Zu NVDIGUID.LZH gehören folgende Dateien:
-
- - NVDIGUID.TXT
-
- (to be continued ...)
-
- Das Archiv darf nur komplett mit diesen Dateien weitergegeben werden!
- Es ist erlaubt, die Dateien für die eigenen Anforderungen zu verändern. Es ist
- jedoch NICHT erlaubt, diese veränderten Dateien weiterzugeben.
-
- Für Wünsche, Anregungen und Fehlerkorrekturen habe ich natürlich immer ein
- offenes Ohr ( wilfried_behne@maush.han.de ).
-
- Disclaimer
- ----------
- Speedo ist ein eingetragenes Warenzeichen von Bitstream Inc., TrueType und
- TrueType GX sind eingetragene Warenzeichen von Apple Computer, Inc, PostScript
- ist ein eingetragenes Warenzeichen von Adobe Systems Inc. Die meisten hier
- erwähnten Produkte sind in der Regel durch Warenzeichen geschützt. Das Fehlen
- gesonderter Hinweise bedeutet nicht, da₧ diese Produkte frei von Rechten Dritter
- sind.
-
-
-
-
- Datentypen und Strukturen
- =========================
-
- ∙ Benutzte Datentypen
-
- Die Deklarationen und Beschreibungen arbeiten mit den folgenden Datentypen:
-
- BYTE 8 Bit, vorzeichenbehaftet, -128 bis 127
- UBYTE 8 Bit, kein Vorzeichen, 0 bis 255
- WORD 16 Bit, vorzeichenbehaftet, -32768 bis 32767
- UWORD 16 Bit, kein Vorzeichen, 0 bis 65535
- LONG 32 Bit, vorzeichenbehaftet, -2147483648 bis 2147483647
- ULONG 32 Bit, kein Vorzeichen, 0 bis 4294967295
- fix31 32 Bit, vorzeichenbehaftet, -2147483648 bis 2147483647
-
- BYTE wird normalerweise in den C-Bindings für die Übergabe von Zeichenketten
- benutzt. Für die meisten VDI-Funktionen werden die BYTE-Werte erweitert (und
- zwar so, als ob sie vorzeichenlos wären), da z.B. der Index eines Zeichens im
- Bereich 0-65535 liegen kann.
-
- Der Standard-Typ des VDIs ist WORD. Die Felder contrl, intin, ptsin, intout und
- ptsout sind als WORD deklariert. Die Interpretation der Werte hängt aber vom
- jeweiliegen VDI-Aufruf ab. Koordinaten in ptsin werden als vorzeichenbehaftet
- betrachtet (-32768 bis +32768), Werte in intin oftmals als vorzeichenlos.
-
- Der Typ fix31 wird im Zusammenhang mit Vektorfonts gebraucht, wo mit Positonen
- und Schrittweiten in 1/65536 gerechnet wird (1 Pixel Weite entspricht 65536).
- Die oberen 16 Bit repräsentieren den Vorkommaanteil und die unteren 16 Bit die
- Nachkommastellen. Beispiele:
-
- hex. dez.
- $00010000 65536 1.0 Pixel
- $0001c000 114688 1.75 Pixel
- $fffec000 -81920 -1.25 Pixel
- $fffe4000 -114688 -1.75 Pixel
-
- Wer Schrittbreiten (beispielsweise von vqt_advance()) aufsummiert und
- anschlie₧end die Pixelposition für Cursorpositionierung berechnen möchte sollte
- wie folgt vorgehen:
-
- WORD fix31_to_pixel( fix31 a )
- {
- WORD b;
-
- b = (WORD) (( a + 32768L ) >> 16 ); /* runden !! */
- return( b ); /* Pixelwert zurückgeben */
- }
-
- Man darf nie, nie, niemals den Nachkommateil einfach abschneiden!
-
-
- ∙ Strukturen und Felder für VDI-Aufrufe
-
- Die folgenden Felder und Strukturen werden für VDI-Aufrufe benötigt:
-
- WORD contrl[12];
-
- In contrl werden die Funktionsnummer, die Anzahl der Eingaben, das Handle der
- Workstation und einige Funktionsabhängige Paramter übergeben. Die Eingaben
- werden grundsätzlich wie folgt eingetragen:
-
- contrl[0]: Funktionsnummer
- contrl[1]: Anzahl der Eingabe-Koordinatenpaare (in ptsin)
- contrl[3]: Anzahl der Eingabe-Integers (in intin)
- contrl[5]: Unterfunktionsnummer
- contrl[6]: Workstation-Handle
- contrl[7..n]: abhängig von der Funktion
-
- Die Ausgaben werden in den folgenden Elementen zurückgegeben:
-
- contrl[2]: Anzahl der Ausgabekoordinatenpaare (in ptsout)
- contrl[4]: Anzahl der Ausgabe-Integers (in intout)
- contrl[6]: Workstation-Handle (nur bei v_opnwk()/v_opnvwk()/v_opnbm())
-
- Die Felder ptsin und ptsout werden benutzt, um Koordinatenpaare oder Ma₧e in
- Pixeln (z.B. die Breite einer Linie oder die Höhe eines Zeichens) zu
- übergeben. Die Grö₧e der Felder hängt von den aufgerufenen Funktionen ab.
- Eine sinnvolle Deklaration könnte wie folgt aussehen:
-
- WORD ptsin[1024]; /* Platz für 512 Eingabe-Koordinatenpaare */
- WORD ptsout[256]; /* Platz für 128 Ausgabe-Koordinatenpaare */
-
- Worte wie der Index eines Zeichens oder der Index einer Farbe werden in intin
- und intout übergeben. Auch hier hängt letztendlich die Grö₧e der Felder von
- den aufgerufenen Funktionen ab. Eine sinnvolle Deklaration könnte wie folgt
- aussehen:
-
- WORD intin[1024]; /* Platz für 1024 Eingabe-Worte */
- WORD intout[512]; /* Platz für 512 Ausgabe-Worte */
-
- Um das VDI aufzurufen, mu₧ der folgende Paramterblock mit den Adressen der
- oben beschriebenen Felder bestückt werden. Die Adresse des Parameterblocks
- wird in Register d1 eingetragen und Register d0.w enthält 115. Anschlie₧end
- wird ein Systemaufruf mit dem Befehl trap #2 ausgelöst.
-
- typedef struct
- {
- WORD *contrl; /* Zeiger auf contrl */
- WORD *intin; /* Zeiger auf intin */
- WORD *ptsin; /* Zeiger auf ptsin */
- WORD *intout; /* Zeiger auf intout */
- WORD *ptsout; /* Zeiger auf ptsout */
- } VDIPB;
-
- Farbeinstellungen:
-
- Bei vs_color(), vq_color() und vs_calibrate() werden RGB-Intensitäten in
- Promille übergeben, wofür am zweckmä₧igsten die RGB-Struktur benutzt wird:
-
- typedef struct
- {
- WORD red; /* Rot-Intensität in Promille (0-1000) */
- WORD green; /* Grün-Intensität in Promille (0-1000) */
- WORD blue; /* Blau-Intensität in Promille (0-1000) */
- } RGB1000;
-
- Rasterfunktionen:
-
- VDI-Funktionen, die Raster verknüpfen, erwarten als Rasterbeschreibung einen
- oder mehrere sogenannte MFDBs, "Memory Form Definition Block".
-
- typedef struct
- {
- void *fd_addr; /* Adresse des Rasters oder 0 für Bildschirm/Bitmap */
- WORD fd_w; /* Breite des Rasters in Pixeln */
- WORD fd_h; /* Höhe des Rasters in Zeilen */
- WORD fd_wdwidth; /* Breite einer Rasterzeile in Worten */
- WORD fd_stand; /* Format 0: gerätespezifisch, 1: Standardformat */
- WORD fd_nplanes; /* Anzahl der Ebenen */
- WORD fd_r1; /* reserviert, sollte 0 sein */
- WORD fd_r2; /* reserviert, sollte 0 sein */
- WORD fd_r3; /* reserviert, sollte 0 sein */
- } MFDB;
-
- Wenn fd_addr eine 0 enthält, mu₧ der Rest des MFDBs nicht ausgefüllt werden. Die
- Rasteroperationen vrt_cpyfm() und vro_cpyfm() beziehen sich dann automatisch auf
- den Bildschirm (oder im Fall eines Druckertreibers auf die Druckerbitmap). Die
- reservierten Worte fd_r1, fd_r2 und fd_r3 sollten hinsichtlich zukünftiger
- Erweiterungen auf 0 gesetzt werden!
-
- Metafiles:
-
- Metafiles beginnen mit dem folgenden Header:
-
- typedef struct
- {
- WORD mf_header; /* -1, Metafile-Kennung */
- WORD mf_length; /* Länge des Headers in Worten (normalerweise 24) */
- WORD mf_version; /* Versionsnummer des Formats, hier 101 für 1.01 */
- WORD mf_ndcrcfl; /* NDC/RC-Flag, normalerweise 2 (Rasterkoordinaten) */
- WORD mf_extents[4]; /* optional - maximale Ausma₧e der Grafik */
- WORD mf_pagesz[2]; /* optional - Seitengrö₧e in 1/10 mm */
- WORD mf_coords[4]; /* optional - Koordinatensystem */
- WORD mf_imgflag; /* Flag für durch v_bit_image() eingebundene IMGs */
- WORD mf_resvd[9];
- } METAHDR;
-
- Die Angaben in mf_extents, mf_pagesz und mf_coords sind optional. Falls ein
- Programm sie nicht gesetzt hat, enthalten diese Felder Nullen. Das IMG-Flag
- zeigt an, ob Aufrufe von v_bit_image() im Metafile gespeichert sind.
-
- Bei vqt_xfntinfo() wird die XFNT_INFO-Struktur benötigt, in oft benötigt Angaben
- über einen Font eingetragen werden:
-
- typedef struct
- {
- LONG size; /* Länge der Struktur, mu₧ vor vqt_xfntinfo() gesetzt werden */
- WORD format; /* Fontformat, z.B. 4 für TrueType */
- WORD id; /* Font-ID, z.B. 6059 */
- WORD index; /* Index */
- BYTE font_name[50]; /* vollständiger Fontname, z.B. "Century 725 Italic BT" */
- BYTE family_name[50]; /* Name der Fontfamilie, z.B. "Century725 BT" */
- BYTE style_name[50]; /* Name des Fontstils, z.B. "Italic" */
- BYTE file_name1[200]; /* Name der 1. Fontdatei, z.B. "C:\FONTS\TT1059M_.TTF" */
- BYTE file_name2[200]; /* Name der optionalen 2. Fontdatei */
- BYTE file_name3[200]; /* Name der optionalen 3. Fontdatei */
- WORD pt_cnt; /* Anzahl der Punkthöhen für vst_point(), z.B. 10 */
- WORD pt_sizes[64]; /* verfügbare Punkthöhen,
- z.B. { 8, 9, 10, 11, 12, 14, 18, 24, 36, 48 } */
- } XFNT_INFO;
-
-
- ∙ Zeichenketten
-
- Grundsätzlich werden Strings beim VDI in intin und intout übergeben, wobei pro
- Zeichen ein Wort benutzt wird. Diese Übergabe hat den Vorteil, da₧ auch andere
- Kodierungen als ASCII benutzbar sind und da₧ auch mehr als 256 Zeichen eines
- Fonts benutzt werden können.
-
- Die C-Bindings für Funktionen wie v_ftext(),vqt_name(), vqt_extent() usw.
- arbeiten mit normalen C-Strings und wandeln sie fürs VDI um. Die Länge eines
- derartigen Strings wird dabei in contrl[3] bzw. contrl[4] eingetragen, wobei kein
- abschlie₧endes Null-Byte oder -Wort vorhanden ist!
- Wer z.B eine in intout ausgegebene Zeichenkette in einen C-String wandeln
- möchte, mu₧ contrl[4] Elemente kopieren, dabei die oberen 8 Bit abschneiden und
- anschlie₧end ein Null-Byte anhängen.
-
- void vdi_str_to_c( UWORD *src, UBYTE *des, WORD len )
- {
- while ( len > 0 )
- {
- *des++ = (UBYTE) *src++; /* nur das Low-Byte kopieren */
- len--;
- }
- *des++ = 0; /* Ende des Strings */
- }
-
- WORD c_str_to_vdi( UBYTE *src, UWORD *des )
- {
- WORD len;
-
- while (( *des++ = *src++ ) != 0 )
- len++;
-
- return( len ); /* Länge des Strings ohne Null-Byte */
- }
-
- Wenn es sich bei einem Funktionsparameter um einen C-String handelt, wird das in
- der Regel explizit erwähnt.
-
-
-
-
- Versionsabfragen
- ================
-
- Um herauszufinden, welche NVDI-Version man vor sich hat und welchen
- Funktionsumfang sie hat, mu₧ der "NVDI"-Cookie gesucht werden, der die
- Versionsnummer im BCD-Format enthält (z.B. 0x0301 für Version 3.01).
-
- Wer die Offscreen-Bitmaps nutzen möchte, sollte nach dem "EdDI"-Cookie suchen.
- Das auf die Kennung folgende Langwort ist die Adresse eines Dispatchers, der mit
- der Funktionsnummer in Register d0.w aufgerufen wird. Für den Aufruf gelten die
- Pure C-Konventionen, d.h. Register d0-d2/a0-a1 und der Stack werden zur
- Parameterübergabe benutzt, d0-d2/a0-a1 können verändert werden). Die Funktion 0
- liefert die EdDI-Versionsnummer im BDC-Format (0x0110 für Version 1.10).
-
- typedef struct
- {
- BYTE id[4]; /* enthält hier 0x4e564449 = 'NVDI' */
- LONG value; /* zeigt auf die NVDI-Struktur */
- } COOKIE;
-
- typedef struct
- {
- UWORD nvdi_version; /* z.B. 0x0301 für Version 3.01 */
- ULONG nvdi_datum; /* z.B. 0x18061990L für 18.06.1990 */
- } NVDI_STRUC;
-
-
-
-
- Funktionsumfang
- ===============
-
- Hier folgt eine kurze Auflistung der unterstützten Funktionen mit Angabe, ab
- welcher Version diese Funktion zur Verfügung steht.
-
- contrl[0] contrl[5] Funktionsname Verfügbarkeit
-
- Treiber und Verwaltung:
-
- 1 0 v_opnwk();
- 2 0 v_clswk();
- 100 0 v_opnvwk();
- 101 0 v_clsvwk();
- 3 0 v_clrwk();
- 4 0 v_updwk();
- 5 22 v_clear_disp_list();
- 100 1 v_opnbm(); ab EdDI 1.00
- 101 1 v_clsbm(); ab EdDI 1.00
- 102 0 vq_extnd();
- 102 1 vq_scrninfo(); ab EdDI 1.00
- 248 0 vq_devinfo(); ab NVDI 3.00
- 248 4242 vq_ext_devinfo(); ab NVDI 3.00
-
- Farbeinstellungen:
-
- 5 76 vs_calibrate(); je nach Treiber
- 5 77 vq_calibrate(); je nach Treiber
- 14 0 vs_color();
- 26 0 vq_color();
-
- Verknüpfung und Zeichenbereich:
-
- 32 0 vswr_mode();
- 129 0 vs_clip();
-
- Linien und nicht gefüllte Grafikprimitive:
-
- 5 99 v_bez_qual(); ab NVDI 2.10
- 6 0 v_pline();
- 6 13 v_bez(); ab NVDI 2.10
- 11 2 v_arc();
- 11 6 v_ellarc();
- 11 8 v_rbox();
- 11 13 v_bez_on(); ab NVDI 2.10
- 11 13 v_bez_off(); ab NVDI 2.10
- 15 0 vsl_type();
- 16 0 vsl_width();
- 17 0 vsl_color();
- 35 0 vql_attributes();
- 108 0 vsl_ends();
- 113 0 vsl_udsty();
-
- Gefüllte Grafikprimitive:
-
- 9 0 v_fillarea();
- 9 13 v_bez_fill(); ab NVDI 2.10
- 11 1 v_bar();
- 11 3 v_pieslice();
- 11 4 v_circle();
- 11 5 v_ellipse();
- 11 7 v_ellpie();
- 11 9 v_rfbox();
- 23 0 vsf_interior();
- 24 0 vsf_style();
- 25 0 vsf_color();
- 37 0 vqf_attributes();
- 103 0 v_contourfill();
- 104 0 vsf_perimeter();
- 112 0 vsf_udpat();
- 114 0 vr_recfl();
-
- Marker:
-
- 7 0 v_pmarker();
- 18 0 vsm_type();
- 19 0 vsm_height();
- 20 0 vsm_color();
- 36 0 vqm_attributes();
-
- Textausgabe:
-
- 8 0 v_gtext();
- 11 10 v_justified();
- 12 0 vst_height();
- 13 0 vst_rotation();
- 21 0 vst_font();
- 22 0 vst_color();
- 38 0 vqt_attributes();
- 39 0 vst_alignment();
- 106 0 vst_effects();
- 107 0 vst_point();
- 116 0 vqt_extent();
- 117 0 vqt_width();
- 119 0 vst_load_fonts();
- 120 0 vst_unload_fonts();
- 130 0 vqt_name(); ab NVDI 3.00 erweitert
- 131 0 vqt_fontinfo();
- 229 0 vqt_xfntinfo(); ab NVDI 3.02
- 230 0 vst_name(); ab NVDI 3.02
- 230 100 vqt_name_and_id(); ab NVDI 3.02
- 231 0 vst_width(); ab NVDI 3.00
- 232 0 vqt_fontheader(); ab NVDI 3.00
- 234 0 vqt_trackkern(); ab NVDI 3.00
- 235 0 vqt_pairkern(); ab NVDI 3.00
- 236 0 vst_charmap(); ab NVDI 3.00
- 237 0 vst_kern(); ab NVDI 3.00
- 237 0 vst_track_offset(); ab NVDI 3.00
- 239 0 v_getbitmap_info(); ab NVDI 3.00
- 240 0 vqt_f_extent(); ab NVDI 3.00
- 240 4200 vqt_real_extent() ab NVDI 3.00
- 241 0 v_ftext(); ab NVDI 3.00
- 241 0 v_ftext_offset(); ab NVDI 3.00
- 243 0 v_getoutline(); ab NVDI 3.00
- 246 0 vst_arbpt(); ab NVDI 3.00
- 247 0 vqt_advance(); ab NVDI 3.00
- 252 0 vst_setsize(); ab NVDI 3.00
- 253 0 vst_skew(); ab NVDI 3.00
-
- Rasterfunktionen:
-
- 105 0 v_get_pixel();
- 109 0 vro_cpyfm();
- 110 0 vr_trnfm();
- 121 0 vrt_cpyfm();
-
- Eingabefunktionen:
-
- 33 0 vsin_mode();
- 28 0 vrq_locator();
- 28 0 vsm_locator();
- 30 0 vrq_choice();
- 30 0 vsm_choice();
- 31 0 vrq_string();
- 31 0 vsm_string();
- 111 0 vsc_form();
- 115 0 vqin_mode();
- 128 0 vex_timv();
- 122 0 v_show_c();
- 123 0 v_hide_c();
- 124 0 vq_mouse();
- 125 0 vex_butv();
- 126 0 vex_motv();
- 127 0 vex_curv();
- 128 0 vq_key_s();
-
- Textmodus und VT52:
-
- 5 1 vq_chcells();
- 5 2 v_exit_cur();
- 5 3 v_enter_cur();
- 5 4 v_curup();
- 5 5 v_curdown();
- 5 6 v_curright();
- 5 7 v_curleft();
- 5 8 v_curhome();
- 5 9 v_eeos();
- 5 10 v_eeol();
- 5 11 v_curaddress();
- 5 12 v_curtext();
- 5 13 v_rvon();
- 5 14 v_rvoff();
- 5 15 vq_curaddress();
-
-
-
-
- Gerätetreiber und Offscreen-Bitmaps
- ===================================
-
- ∙ OPEN WORKSTATION (VDI 1)
-
- Mit dieser Funktion öffnen Sie eine physikalische Workstation. Dazu wird ein in
- der ASSIGN.SYS-Datei eingetragener Gerätetreiber geladen und den Eingaben
- entsprechend initialisiert.
-
- Wenn die Initialisierung erfolgreich verlaufen ist, wird in contrl[6] eine
- Kennung (im weiteren Verlauf Handle genannt) zurückgegeben, andernfalls eine
- Null.
-
- Wichtig: Der Bildschirmtreiber wird nach Abarbeitung des AUTO-Ordners vom AES
- geöffnet. Anwenderprogramme müssen daher zur Bildschirmausgabe eine
- virtuelle Workstation (VDI 100) öffnen.
-
- Dekl.: void v_opnwk( WORD *work_in, WORD *handle, WORD *work_out );
- Aufruf: v_opnwk( work_in, &handle, work_out );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 1 v_opnwk
- contrl[1] 0 Einträge in ptsin
- contrl[3] 11 Einträge in intin
- contrl[6] 0 oder 1
- intin[0..10] work_in[0..10]
-
- Ausgaben:
-
- contrl[2] 6 Einträge in ptsout
- contrl[4] 45 Einträge in intout
- contrl[6] handle
- intout[0..44] work_out[0..44]
- ptsout[0..11] work_out[45..56]
-
- Bedeutung von work_in[0..10]:
- work_in[0]: Geräteidentifikationsnummer. Mit ihr wählen Sie den zu ladenden
- Gerätetreiber.
-
- 1-10 : Bildschirmtreiber
- 1: aktuelle Auflösung
- 2: 320*200, 16 Farben
- 3: 640*200, 4 Farben
- 4: 640*400, monochrom
- 6: 640*480, 16 Farben (TT)
- 8: 1280*960, monochrom (TT)
- 9: 320*480, 256 Farben (TT)
-
- ab 11:Plottertreiber
- ab 21:Druckertreiber
- ab 31:Metafiletreiber
- ab 41:Kamera
- ab 51:Grafiktablett
- ab 61:Memory-Treiber
-
- work_in[1]: Linientyp
- work_in[2]: Linienfarbe
- work_in[3]: Markertyp
- work_in[4]: Markerfarbe
- work_in[5]: Zeichensatznummer
- work_in[6]: Textfarbe
- work_in[7]: Fülltyp
- work_in[8]: Füllmuster-Index
- work_in[9]: Füllmuster-Farbe
- work_in[10]:Koordinatenflag 0: NDC , 2: RC
-
- Bedeutung von work_out[0..56]:
- work_out[0]: Adressierbare Rasterbreite (Wertebereich 0 - xmax)
- work_out[1]: Adressierbare Rasterhöhe (Wertebereich 0 - ymax)
- work_out[2]: Gerätekoordinatenflag
- 0: genaue Skalierung möglich (z.B. Bildschirm)
- 1: keine genaue Skalierung möglich (Film-Recorder)
- work_out[3]: Breite eines Pixels in Mikrometern
- work_out[4]: Höhe eines Pixels in Mikrometern
- work_out[5]: Anzahl der Zeichenhöhen (0: beliebig veränderbar)
- work_out[6]: Anzahl der Linientypen
- work_out[7]: Anzahl der Linienbreiten (0: beliebig veränderbar)
- work_out[8]: Anzahl der Markertypen
- work_out[9]: Anzahl der Markergrö₧en (0: beliebig veränderbar)
- work_out[10]: Anzahl der verfügbaren Zeichensätze
- work_out[11]: Anzahl der Muster
- work_out[12]: Anzahl der Schraffuren
- work_out[13]: Anzahl der Farben
- work_out[14]: Anzahl der GDPs
- work_out[15] bis work_out[24]:
- Liste der GDPs, deren Ende durch -1 gekennzeichnet ist.
- work_out[25] bis work_out[34]:
- Liste der Attribute der GDPs:
- 0: Linie
- 1: Marker
- 2: Text
- 3: ausgefüllter Bereich
- 4: keine Attribute
- work_out[35]: Farbdarstellungsflag
- work_out[36]: Textrotationsflag
- work_out[37]: Flächenfüllung
- work_out[38]: CELLARRAY-Flag
- work_out[39]: Anzahl der Farbabstufungen (0: mehr als 32767)
- work_out[40]: Kontrolle des Mauszeigers
- 1: Tastatur
- 2: Tastatur und Maus (oder anderes Gerät)
- work_out[41]: Gerät für variierende Eingaben
- 1: Tastatur
- 2: anderes Gerät
- work_out[42]: Auswahltasten
- 1: Funktionstasten
- 2: anderes Tastenfeld
- work_out[43]: String-Eingabe
- 1: Tastatur
- work_out[44]: Geräte-Typ
- 0: nur Ausgabe
- 1: Eingabe
- 2: Ein- u. Ausgabe
- 4: Metafile-Ausgabe
- work_out[45]: geringste Zeichenbreite
- work_out[46]: geringste Zeichenhöhe
- work_out[47]: grö₧te Zeichenbreite
- work_out[48]: grö₧te Zeichenhöhe
- work_out[49]: geringste Linienbreite
- work_out[50]: 0
- work_out[51]: grö₧te Linienbreite
- work_out[52]: 0
- work_out[53]: geringste Markerbreite
- work_out[54]: geringste Markerhöhe
- work_out[55]: grö₧te Markerbreite
- work_out[56]: grö₧te Markerhöhe
-
- Bei NVDI-Drucker- und IMG-Treibern kann au₧erdem das Seitenformat und der
- Ausgabekanal gesetzt werden. Bei META.SYS wirkt sich die Einstellung des
- Seitenformats nicht aus (sollte auf 0 gesetzt werden), der Dateiname wird aber
- für den Metafile übernommen.
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 1 v_opnwk
- contrl[1] 0 Einträge in ptsin
- contrl[3] 16 Einträge in intin
- contrl[6] 0 oder 1
- intin[0..15] work_in[0..15]
-
- Ausgaben:
- wie oben beschrieben
-
- Bedeutung von work_in[11..15]:
- work_in[11]: Seitenformat
- #define PAGE_DEFAULT 0 /* Voreinstellung benutzen */
- #define PAGE_A3 1 /* DIN A3 */
- #define PAGE_A4 2 /* DIN A4 */
- #define PAGE_A5 3 /* DIN A5 */
- #define PAGE_B5 4 /* DIN B5 */
-
- #define PAGE_LETTER 16 /* Letter size */
- #define PAGE_HALF 17 /* Half size */
- #define PAGE_LEGAL 18 /* Legal size */
- #define PAGE_DOUBLE 19 /* Double size */
- #define PAGE_BROAD 20 /* Broad sheet size */
-
- work_in[12/13]: Zeiger auf einen GEMDOS-Dateinamen (C-String) oder Null
- work_in[14]: 0, reserviert
- work_in[15]: 0, reserviert
-
-
- ∙ CLOSE WORKSTATION (VDI 2)
-
- "CLOSE WORKSTATION" schlie₧t eine physikalische Workstation. Vorher sollten alle
- virtuellen Workstations geschlossen werden.
- Bei Druckertreibern werden vor dem Schlie₧en ggf. die noch gepufferten Kommandos
- ausgeführt, bei Metafiletreibern wird der Metafile geschlo₧en. Man beachte, da₧
- das Schlie₧en der Workstation bei Druckertreibern keinen Seitenvorschub auslöst.
-
- Dekl.: void v_clswk( WORD handle );
- Aufruf: v_clswk( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 2 v_clswk
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ OPEN VIRTUAL SCREEN WORKSTATION (VDI 100)
-
- "OPEN VIRTUAL SCREEN WORKSTATION" öffnet eine virtuelle Bildschirm-Workstation
- auf einer bereits geöffneten physikalischen Workstation. Dadurch können die
- Zugriffe verschiedener Programme mit ihren unterschiedlichen Einstellungen
- koordiniert werden. Für Bildschirmtreiber müssen Sie das Handle der
- AES-Bildschirm-Workstation nach der Anmeldung Ihres Programmes beim AES mit.
-
- aes_handle = graf_handle(&gr_hwchar,&gr_hhchar,&gr_hwbox,&gr_hhbox);
- handle = aes_handle;
-
- ermitteln.
-
- Dekl.: void v_opnvwk( WORD *work_in, WORD *handle, WORD *work_out );
- Aufruf: v_opnvwk( work_in, &handle, work_out );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 100 v_opnvwk
- contrl[1] 0 Einträge in ptsin
- contrl[3] 11 Einträge in intin
- contrl[6] handle Handle der physikalischen Workstation
- intin[0..10] work_in[0..10]
-
- Ausgaben:
-
- contrl[2] 6 Einträge in ptsout
- contrl[4] 45 Einträge in intout
- contrl[6] handle Handle der virtuellen Workstation
- intout[0..44] work_out[0..44]
- ptsout[0..11] work_out[45..56]
-
- Die Bedeutung der Ein- und Ausgaben ist mit denen von "OPEN WORKSTATION"
- identisch.
-
-
- ∙ CLOSE VIRTUAL SCREEN WORKSTATION (VDI 101)
-
- Mit dieser Funktion wird eine geöffnete virtuelle Workstation geschlossen.
-
- Dekl.: void v_clsvwk( WORD handle );
- Aufruf: v_clsvwk( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 101 v_clsvwk
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ CLEAR WORKSTATION (VDI 3)
-
- Diese Funktion löscht den Bildschirm. Bei Plottern oder Druckern wird ein
- Seitenvorschub durchgeführt und der Druckpuffer gelöscht.
-
- Deklaration: void v_clrwk( WORD handle );
- Aufruf: v_clrwk( handle);
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 3 v_clrwk
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ CLEAR DISPLAY LIST (VDI 5, Escape 22)
-
- Diese Funktion löscht bei Plottern oder Druckern den Druckerpuffer. Im Gegensatz
- zu CLEAR WORKSTATION wird jedoch kein Seitenvorschub durchgeführt.
- Diese Funktion sollte z.B. dann aufgerufen werden, wenn der Benutzer die
- Grafikausgaben vor dem Ausdruck (also vor dem UPDATE WORKSTATION) abbrechen
- möchte.
-
- Deklaration: void v_clear_disp_list( WORD handle );
- Aufruf: v_clear_disp_list( handle);
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 v_escape
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 22 Unterfunktionsnummer v_clear_disp_list
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ UPDATE WORKSTATION (VDI 4)
-
- Diese Funktion wird auf Geräten wie z.B. Druckern aufgerufen, die VDI-Kommandos
- in einer Liste puffern. "UPDATE WORKSTATION" veranla₧t die Ausführung dieser
- gepufferten Kommandos. Bei Bildschirm-Workstations oder Offscreen-Bitmaps mu₧
- diese Funktion nicht aufgerufen werden, da Grafikkommandos sofort abgearbeitet
- werden.
-
- Dekl.: void v_updwk( WORD handle );
- Aufruf: v_updwk( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 4 v_updwk
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ OPEN BITMAP (VDI 100, 1)
-
- Der Aufruf von "OPEN BITMAP" erzeugt eine Off-Screen-Bitmap auf der mit
- VDI-Funktionen gezeichnet werden kann. Die Bitmap kann entweder übergeben werden
- oder das VDI alloziert selber den dafür nötigen Speicher. Die zu übergebenden
- Pixelgrö₧en werden bei den Vektorfonts beachtet, so da₧ die Ma₧haltigkeit
- gewährt ist.
- Die Benutzung von Offscreen-Bitmaps bietet sich auch dann an, wenn man Effekte
- wie starkes Flackern vermeiden möchte. In diesem Fall baut man Teile der Grafik
- in der Bitmap auf und überträgt die Bitmap mit vrt_cpyfm() oder vro_cpyfm() auf den
- Bildschirm.
-
- Dekl.: void v_opnbm( WORD *work_in, MFDB *bitmap, WORD *handle, WORD *work_out );
- Aufruf: v_opnbm( work_in, &bitmap, &handle, work_out );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 100 v_opnbm
- contrl[1] 0 Einträge in ptsin
- contrl[3] 20 Einträge in intin
- contrl[5] 1 Unterfunktionsnummer für v_opnbm
- contrl[6] handle Handle der physikalischen Workstation
- contrl[7..8] bitmap Zeiger auf einen MFDB der Bitmap
- intin[0..19] work_in[0..19]
-
- Ausgaben:
-
- contrl[2] 6 Einträge in ptsout
- contrl[4] 45 Einträge in intout
- contrl[6] handle Handle der Bitmap
- intout[0..44] work_out[0..44]
- ptsout[0..11] work_out[45..56]
-
- Bedeutung von work_in:
- work_in[0..10]: wie bei v_opnwk()/v_opnvwk() definiert
- work_in[11]: Breite -1 (z.B. 1279)
- work_in[12]: Höhe -1 (z.B. 959)
- work_in[13]: Breite eines Pixels in Mikrometern
- work_in[14]: Höhe eines Pixels in Mikrometern
- work_in[15..19]: mu₧ 0 sein, wenn das gerätespezifische Format benutzt wird
-
- Bedeutung von bitmap:
- Bitmap ist ein Zeiger auf einen MFDB. Falls bitmap->fd_addr gleich NULL ist, so
- wird anhand der Grö₧enangaben in work_in Speicher für die Bitmap angefordert
- (die Bitmap wird im Gegensatz zu v_opnvwk() gelöscht).
-
- Um eine Bitmap im gerätespezifischen Format zu öffnen, mu₧ bitmap->fd_nplanes
- eine Null oder die Ebenenanzahl des Schirms enthalten (work_out[4] bei
- vq_extnd()). Ist bitmap->fd_nplanes 1, wird eine monochrome Bitmap angelegt.
-
- Die Einträge des MFDB (fd_addr, fd_w, fd_h, fd_wdwidth, fd_stand, fd_nplanes)
- werden vom VDI-Treiber gesetzt und an die aufrufende Applikation zurückgegeben.
- Wenn nicht nicht genügend Speicher vorhanden ist, wird der Inhalt des MFDBs
- nicht verändert; ein Null-Handle wird zurückgegeben.
-
- Wenn bitmap->fd_addr ungleich NULL ist, wird dieser Eintrag als Zeiger auf eine
- Bitmap interpretiert. Wenn die Bitmap im Standardformat vorliegt, wird sie ins
- gerätespezifische Format umgewandelt. Liegt sie schon im gerätespezifischen
- Format vor, so wird sie nicht umgewandelt. Falls die Auflösung der Bitmap (d.h.
- die Anzahl der Farben und Planes) nicht unterstützt wird, gibt v_opnbm() ein
- Null-Handle zurück.
-
- Ab EdDI 1.1 kann v_opnbm() mit zusätzlichen Parametern in work_in[15..19]
- aufgerufen werden. Es wird dann versucht, eine Bitmap in dem durch diese
- Parameter beschriebenen Format zu öffnen. Sollte für das angegebene Format kein
- Treiber vorhanden sein, kann die Bitmap nicht erzeugt werden.
-
- work_in[15..16]: Anzahl der gleichzeitig darstellbaren Farben
- work_in[17]: Anzahl der Planes
- work_in[18]: Pixelformat
- work_in[19]: Bitreihenfolge
-
- Pixelformat und Bitreihenfolge werden bei vq_scrninfo() genauer beschrieben. Mit
- den folgenden Parametern kann z.B. eine Offscreen-Bitmap mit 256 Farben und
- Interleaved Planes erzeugt werden:
-
- work_in[15..16] = 256; /* 256 gleichzeitig darstellbare Farben */
- work_in[17] = 8; /* 8 Farbebenen */
- work_in[18] = 0; /* Interleaved Planes */
- work_in[19] = 1; /* normale Bitreihenfolge (Motorola-Format) */
-
-
- ∙ CLOSE BITMAP (VDI 101, 1)
-
- Die Funktion v_clsbm() schlie₧t die mit handle bezeichnete Bitmap. Wenn der
- Speicher bei v_opnbm() vom VDI alloziert wurde, gibt sie diesen Speicher wieder
- frei.
-
- Dekl.: void v_clsbm( WORD handle );
- Aufruf: v_clsbm( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 101 v_clsbm
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 1 Unterfunktionsnummer für v_clsbm()
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ EXTENDED INQUIRE FUNCTION (VDI 102)
-
- Von dieser Funktion werden entweder die Parameter von v_opnwk()/v_opnvwk() oder
- erweiterte Auskünfte zum Gerätetreiber und zum Gerät zurückgeliefert.
-
- Dekl.: void vq_extnd( WORD handle, WORD flag, WORD *work_out );
- Aufruf: vq_extnd( handle, owflag, work_out );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 102 vq_extnd
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] flag Informationstyp
-
- Ausgaben:
-
- contrl[2] 6 Einträge in ptsout
- contrl[4] 45 Einträge in intout
- intout[0..44] work_out[0..44]
- ptsout[0..11] work_out[45..56]
-
- Bedeutung von flag:
- 0: Parameter von v_opnwk()/v_opnvwk()
- 1: erweiterte Parameter
-
- Bedeutung von work_out:
- work_out[0]: Bildschirmtyp
- 0: kein Bildschirm
- 1: getrennter Text- und Grafikmodus und getrennter
- Bildspeicher
- 2: getrennter Text- und Grafikmodus mit gemeinsamem
- Bildspeicher
- 3: gemeinsamer Text- und Grafikmodus mit getrenntem
- Bildspeicher
- 4: gemeinsamer Text- und Grafikmodus mit gemeinsamem
- Bildspeicher
- work_out[1]: Anzahl der Farbabstufungen
- work_out[2]: Anzahl der Texteffekte
- work_out[3]: Flag für Vergrö₧erung des Rasters
- 0: Vergrö₧erung nicht möglich
- 1: Vergrö₧erung möglich
- work_out[4]: Anzahl der Bildebenen
- work_out[5]: "Color lookup table"-Unterstützung
- 0: nicht möglich
- 1: möglich
- work_out[6]: Anzahl der 16*16-Pixel-Raster-Operationen pro Sekunde
- work_out[7]: Verfügbarkeit der Flächenfüllung (v_contourfill)
- 0: nicht verfügbar
- 1: verfügbar
- work_out[8]: Textrotation
- 0: nicht möglich
- 1: in 90-Grad-Schritten
- 2: in 1/10-Grad-Schritten
- work_out[9]: Anzahl der Schreibmodi
- work_out[10]: Eingabemodi
- 0: keine
- 1: Request
- 2: Request und Sample
- work_out[11]: Textausrichtung:
- 0: nicht verfügbar
- 1: verfügbar
- work_out[12]: Farbstiftwechsel
- 0: nicht möglich
- 1: möglich
- work_out[13]: Farbbandwechsel
- 0: nicht möglich
- 1: farbige Zeilen
- 2: farbige Zeilen und Rechtecke
- work_out[14]: maximale Anzahl der Koordinatenpaare für Polyline,
- Polymarker, und Filled Area oder -1 (unbegrenzt)
- work_out[15]: maximale Länge des intin-Array oder -1 (unbegrenzt)
- work_out[16]: Anzahl der Maustasten
- work_out[17]: Verfügbarkeit von Linientypen für breite Linien
- 0: nicht verfügbar
- 1: verfügbar
- work_out[18]: Anzahl der Schreibmodi für breite Linien
- work_out[19]: Clipping-Flag
- 0: Clipping aus
- 1: Clipping an
- work_out[20]: 0: keine genaueren Pixelgrö₧en in den folgenden Feldern
- 1: Pixelausma₧e werden in 1/10 Mikrometern zurückgeliefert
- 2: Pixelausma₧e werden in 1/100 Mikrometern zurückgeliefert
- 3: Pixelausma₧e werden in 1/1000 Mikrometern zurückgeliefert
-
- work_out[21]: Pixelbreite in 1/10, 1/100 oder 1/1000 Mikrometern
- work_out[22]: Pixelhöhe in 1/10, 1/100 oder 1/1000 Mikrometern
- work_out[23]: horizontale Auflösung in dpi
- work_out[24]: vertikale Auflösung in dpi
- work_out[28]: Bezier-Flag. Bit 1 gibt Auskunft über die Bezierfähigkeiten
- 0: Keine Beziers
- 1: Beziers
-
- work_out[40]: nicht bedruckbarer linker Rand in Pixeln (nur Drucker usw.)
- work_out[41]: nicht bedruckbarer oberer Rand in Pixeln (nur Drucker usw.)
- work_out[42]: nicht bedruckbarer rechter Rand in Pixeln (nur Drucker usw.)
- work_out[43]: nicht bedruckbarer unterer Rand in Pixeln (nur Drucker usw.)
-
- work_out[45..48]: Clipping-Rechteck
-
- Bemerkungen:
- Wenn work_out[20] einen Wert ungleich 0 enthält, werden in den Elementen 21-24
- und 40-43 zusätzliche Informationen über Pixelgrö₧e und nicht bedruckbare
- Ränder übergeben. Die nicht bedruckbaren Ränder werden normalerweise nur bei
- Druckertreibern zurückgeliefert. Sie ermöglichen Applikationen, Dokumente zu
- zentrieren oder dem Benutzer ein zutreffendes Bild der ausgedruckten Seite zu
- liefern, indem die Ränder im Dokument angezeigt werden (der bei v_opnwk() in
- work_in[0/1] zurückgelieferte Bereich ist der bedruckbare Bereich).
-
- Wenn genauere Pixelgrö₧en zurückgeliefert werden, sollte man diese besonders
- beim Drucken zur Positionsberechnung der einzelnen Grafikobjekte benutzen, denn
- die Benutzung der Werte in work_out[3..4] kann im schlimmsten Fall auf einem
- DIN A4 Blatt zu einer Ungenauigkeit von insgesamt 2 bis 3 mm führen.
-
- Die Rückgabe des Clipping-Flags (work_out[19]) und des Clipping-Rechtecks
- (work_out[45..48]) ist GEM 2.x-kompatibel. Unter dem ATARI-VDI wird das
- Clipping-Flag nicht zurückgegeben, wohl aber das Clipping-Rechteck (obwohl das
- nicht dokumentiert ist) - Benutzung also auf eigene Gefahr!
-
- Die Rückgabe des Bezier-Flag (work_out[28], Bit 1) ist GEM/3-kompatibel. Im
- ATARI-VDI ist work_out[28] reserviert und enthält eine Null.
-
-
- ∙ INQUIRE SCREEN INFORMATION (VDI 102, 1)
-
- "INQUIRE SCREEN INFORMATION" liefert genauere Angaben über Bildschirmformat
- (auch gerätespezifisches Format genannt).
- Diese Informationen sind in erster Linie interessant für Programme, die
- - schnell Raster aufbauen (dithern) und diese mit vro_cpyfm() kopieren möchten.
- - farbige Raster speichern (XIMGs, TIFFs, JPEGs).
-
- Dekl.: void vq_scrninfo( WORD handle, WORD *work_out );
- Aufruf: vq_scrninfo( handle, work_out );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 102 vq_scrninfo
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[5] 1 Unterfunktionsnummer von vq_scrninfo()
- contrl[6] handle
- intin[0] 2 erweiterte Informationen ausgeben
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 272 Einträge in intout
- intout[0..272] work_out[0..272] erweiterte Informationen
-
- Bedeutung von work_out:
- work_out[0]: Formatangabe:
- 0: Interleaved Planes, wortweise (ATARI Grafik)
- 1: Standardformat (komplette Planes)
- 2: Packed Pixels
- -1: unbekanntes Format; nicht direkt beschreibbar
- work_out[1]: Verfügbarkeit einer CLUT:
- 0: keine CLUT (z.B. TTM 194)
- 1: Hardware-CLUT
- 2: Software-CLUT (HiColor oder TrueColor)
- work_out[2]: Anzahl der Ebenen (Bits) pro Pixel
- work_out[3/4]: Farbanzahl oder 0L (mehr als 2*10^31 Farben)
- work_out[5]: Breite einer Zeile in Bytes (erst ab EdDI 1.1)
- work_out[6/7]: Adresse der Bitmap (erst ab EdDI 1.1)
- work_out[8]: Anzahl der Bits für die Rot-Intensität
- work_out[9]: Anzahl der Bits für die Grün-Intensität
- work_out[10]: Anzahl der Bits für die Blau-Intensität
- work_out[11]: Anzahl der Bits für den Alpha-Channel oder ähnliches
- work_out[12]: Anzahl der Bits für Genlock
- work_out[13]: Anzahl der nicht benutzen Bits
- work_out[14]: Bitorganisation (erst ab EdDI 1.1)
-
- Bei 2-256 Farben:
-
- Bitnummer | Bedeutung des Bits
- ----------|--------------------------------------------------
- 0 | normale Bitreihenfolge
-
- Bei 32768 Farben (16 Planes):
-
- Bitnummer | Bedeutung des Bits
- ----------|--------------------------------------------------
- 0 | normale Bitreihenfolge, d.h. 1 Overlay-Bit,
- | 5 Rot-Bits, 5 Grün-Bits, 5 Blau-Bits
- |
- 1 | Falcon-Format, d.h. 5 Rot-Bits, 5 Grün-Bits,
- | 1 Overlay-Bit, 5 Blau-Bits
- |
- 7 | Bytes vertauscht: Intel-Modell
-
- Bei 65536 Farben (16 Planes):
-
- Bitnummer | Bedeutung des Bits
- ----------|--------------------------------------------------
- 0 | normale Bitreihenfolge, d.h. 5 Rot-Bits,
- | 6 Grün-Bits, 5 Blau-Bits
- |
- 7 | Bytes vertauscht: Intel-Modell
-
- Bei 16777216 Farben (24 Planes):
-
- Bitnummer | Bedeutung des Bits
- ----------|--------------------------------------------------
- 0 | normale Bitreihenfolge, d.h. 8 Rot-Bits,
- | 8 Grün-Bits, 8 Blau-Bits
- |
- 7 | Bytes vertauscht: Intel-Modell
-
- Bei 16777216 Farben (32 Planes):
-
- Bitnummer | Bedeutung des Bits
- ----------|--------------------------------------------------
- 0 | normale Bitreihenfolge, d.h. 8 Overlay-Bits,
- | 8 Rot-Bits, 8 Grün-Bits, 8 Blau-Bits
- |
- 7 | Bytes vertauscht: Intel-Modell
-
- Falls eine Hardware-CLUT (intout[1] == 1) vorhanden ist:
- work_out[16-271]: Pixelwert des zugehörigen VDI-Farbindexes
-
- Falls HiColor, TrueColor oder ähnliches vorhanden ist:
- work_out[16..31]: Zuordnung von Bitnummer im Pixel zum Bit der Rotintensität
- work_out[32..47]: Zuordnung von Bitnummer im Pixel zum Bit der Grünintens.
- work_out[48..63]: Zuordnung von Bitnummer im Pixel zum Bit der Blauintensität
- work_out[64..79]: Zuordnung der Bitnummer für Alpha-Channel
- work_out[80..95]: Zuordnung der Bitnummer für Genlock
- work_out[96..127]: unbenutzte Bits
- work_out[128..271]: reserviert (0)
-
- Beispiele:
- ----------
-
- In 256 Farben auf dem Falcon würden folgende Ausgaben erfolgen:
-
- work_out | Wert | Bedeutung
- ---------|--------|-----------------------------------------------------
- 0 | 0 | Interleaved Planes, wortweise
- 1 | 1 | Hardware-CLUT vorhanden
- 2 | 8 | 8 Bit pro Pixel
- 3/4 | 256 | 256 verschiedene Farben gleichzeitig möglich
- 5 | xxxx | Bitmapbreite in Bytes (erst ab EdDI 1.1)
- 6/7 | xxxxL | Bitmapadresse (erst ab EdDI 1.1)
- 8 | 6 | 6 Bits für die Rot-Intensität
- 9 | 6 | 6 Bits für die Grün-Intensität
- 10 | 6 | 6 Bits für die Blau-Intensität
- 11 | 0 | kein Bit für Alpha-Channel
- 12 | 0 | kein Bit für Genlock
- 13 | 0 | kein unbenutzes Bit
- 14 | 1 | normale Bitreihenfolge (erst ab EdDI 1.1)
- | |
- 16 | 0 | Pixelwert für VDI-Farbindex 0
- 17 | 255 | Pixelwert für VDI-Farbindex 1
- 18 | 2 | Pixelwert für VDI-Farbindex 2
- ... | ... |
- 271 | 15 | Pixelwert für VDI-Farbindex 255
-
- In HiColor auf dem Falcon würden folgende Ausgaben erfolgen:
-
- work_out | Wert | Bedeutung
- ---------|--------|-----------------------------------------------------
- 0 | 2 | Packed Pixels
- 1 | 2 | HiColor bzw. TrueColor
- 2 | 16 | 16 Bit pro Pixel
- 3/4 | 32768 | 32768 verschiedene Farben gleichzeitig möglich
- 5 | xxxx | Bitmapbreite in Bytes (erst ab EdDI 1.1)
- 6/7 | xxxxL | Bitmapadresse (erst ab EdDI 1.1)
- 8 | 5 | 5 Bits für die Rot-Intensität
- 9 | 5 | 5 Bits für die Grün-Intensität
- 10 | 5 | 5 Bits für die Blau-Intensität
- 11 | 0 | kein Bit für Alpha-Channel
- 12 | 1 | ein Bit für Genlock
- 13 | 0 | kein unbenutzes Bit
- 14 | 2 | Falcon 15-Bit-Format mit 1 Overlay-Bit (erst ab EdDI 1.1)
- | |
- 16 | 11 | Bit 0 der Rot-Intensität (niederwertigstes Bit)
- | | befindet sich in Bit 11 des Pixels
- 17 | 12 | Bit 1 befindet sich in Bit 12 des Pixels
- 18 | 13 | ...
- 19 | 14 | ...
- 20 | 15 | Bit 4 der Rot-Intensität (höchstwertigstes Bit)
- | | befindet sich in Bit 15 des Pixels
- 21..31 | -1 | Bits werden nicht für Rot-Intensität benutzt
- | |
- | |
- 32 | 6 | Bit 0 der Grün-Intensität (niederwertigstes Bit)
- | | befindet sich in Bit 6 des Pixels
- 33 | 7 | Bit 1 befindet sich in Bit 7 des Pixels
- 34 | 8 | ...
- 35 | 9 | ...
- 36 | 10 | Bit 4 der Grün-Intensität (höchstwertigstes Bit)
- | | befindet sich in Bit 10 des Pixels
- 37..37 | -1 | Bits werden nicht für Grün-Intensität benutzt
- | |
- | |
- 48 | 0 | Bit 0 der Blau-Intensität (niederwertigstes Bit)
- | | befindet sich in Bit 0 des Pixels
- 49 | 1 | Bit 1 befindet sich in Bit 1 des Pixels
- 50 | 2 | ...
- 51 | 3 | ...
- 52 | 4 | Bit 4 der Blau-Intensität (höchstwertigstes Bit)
- | | befindet sich in Bit 4 des Pixels
- 53..63 | -1 | Bits werden nicht für Blau-Intensität benutzt
- | |
- | |
- 64..79 | -1 | kein Alpha-Channel
- | |
- | |
- 80 | 5 | Bit für Genlock
- 81..95 | -1 | nicht für Genlock benutzt
- | |
- | |
- 96..127| -1 | keine unbenutzten Bits
- | |
-
- In HiColor auf einer VGA-Grafikkarte würden folgende Ausgaben erfolgen:
-
- work_out | Wert | Bedeutung
- ---------|--------|-----------------------------------------------------
- 0 | 2 | Packed Pixels
- 1 | 2 | HiColor bzw. TrueColor
- 2 | 16 | 16 Bit pro Pixel
- 3/4 | 32768 | 32768 verschiedene Farben gleichzeitig möglich
- 5 | xxxx | Bitmapbreite in Bytes (erst ab EdDI 1.1)
- 6/7 | xxxxL | Bitmapadresse (erst ab EdDI 1.1)
- 8 | 5 | 5 Bits für die Rot-Intensität
- 9 | 5 | 5 Bits für die Grün-Intensität
- 10 | 5 | 5 Bits für die Blau-Intensität
- 11 | 0 | kein Bit für Alpha-Channel
- 12 | 0 | kein Bit für Genlock
- 13 | 1 | ein unbenutzes Bit
- 14 | 129 | 15 Bit in Intel-Darstellung (erst ab EdDI 1.1)
- | |
- 16 | 2 | Bit 0 der Rot-Intensität (niederwertigstes Bit)
- | | befindet sich in Bit 11 des Pixels
- 17 | 3 | Bit 1 befindet sich in Bit 12 des Pixels
- 18 | 4 | ...
- 19 | 5 | ...
- 20 | 6 | Bit 4 der Rot-Intensität (höchstwertigstes Bit)
- | | befindet sich in Bit 15 des Pixels
- 21..31 | -1 | Bits werden nicht für Rot-Intensität benutzt
- | |
- | |
- 32 | 13 | Bit 0 der Grün-Intensität (niederwertigstes Bit)
- | | befindet sich in Bit 6 des Pixels
- 33 | 14 | Bit 1 befindet sich in Bit 7 des Pixels
- 34 | 15 | ...
- 35 | 0 | ...
- 36 | 1 | Bit 4 der Grün-Intensität (höchstwertigstes Bit)
- | | befindet sich in Bit 10 des Pixels
- 37..37 | -1 | Bits werden nicht für Grün-Intensität benutzt
- | |
- | |
- 48 | 8 | Bit 0 der Blau-Intensität (niederwertigstes Bit)
- | | befindet sich in Bit 0 des Pixels
- 49 | 9 | Bit 1 befindet sich in Bit 1 des Pixels
- 50 | 10 | ...
- 51 | 11 | ...
- 52 | 12 | Bit 4 der Blau-Intensität (höchstwertigstes Bit)
- | | befindet sich in Bit 4 des Pixels
- 53..63 | -1 | Bits werden nicht für Blau-Intensität benutzt
- | |
- | |
- 64..79 | -1 | kein Alpha-Channel
- | |
- | |
- 80..95 | -1 | nicht für Genlock benutzt
- | |
- | |
- 96 | 7 | unbenutztes Bit
- 97..127| -1 | keine unbenutzten Bits
- | |
-
- Bemerkungen:
- Die Ausgaben in work_out[5..7/14] sind erst ab EdDI-Version 1.1 vorhanden und
- sollen die Erkennung des Formats erleichtern. Bevor man auf sie zugreift, sollte
- man noch die Version des EdDI-Cookies getestet haben.
-
-
- ∙ INQUIRE DEVICE STATUS INFORMATION (VDI 248)
-
- Vq_devinfo() liefert zurück, ob ein Treiber ein Treiber vorhanden ist und ob er
- schon geöffnet wurde. Au₧erdem wird der Dateiname (z.B. XVGA256.SYS) und der
- Klartextname (VGA 256 Farben) des Treibers zurückgeliefert. Wenn der Dateiname
- leer ist, ist der Treiber nicht vorhanden.
-
-
- Dekl.: void vq_devinfo( WORD handle, WORD device, WORD *dev_open,
- BYTE *file_name, BYTE *device_name );
- Aufruf: vq_devinfo( handle, device, &dev_open, file_name, device_name );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 248 vq_devinfo
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] device VDI-Gerätenummer (0-99)
-
- Ausgaben:
-
- contrl[2] p Anzahl der WÖRTER in ptsout
- contrl[4] i Anzahl der Wörter in intout
-
- ptsout[0] dev_open 0: Treiber ist noch nicht geöffenet
- 1: Treiber ist bereits geöffnet
- ptsout[1..p-1] device_name Klartextname des Treibers als C-String
- intout[0..i-1] file_name Dateiname des Treibers
-
- Bemerkungen:
- Der Dateiname wird wortweise zurückgeliefert, d.h. 1 Wort pro Buchstabe, wobei
- contrl[4] die Länge angibt. Der Klartextname wird als nullterminierter C-String
- zurückgeliefert - contrl[2] enthält die Anzahl der _WÖRTER_ in ptsout.
-
-
- ∙ INQUIRE EXTENDED DEVICE STATUS INFORMATION (VDI 248, 4242)
-
- Ähnlich wie vq_devinfo() liefert vq_ext_devinfo() Treibernamen und
- Informationen über den Treiber zurück. Das Format ist aber etwas sinnvoller.
-
- Dekl.: WORD vq_ext_devinfo( WORD handle, WORD device, WORD *dev_exists,
- BYTE *file_path, BYTE *file_name, BYTE *name );
-
- Aufruf: dev_open = vq_ext_devinfo( handle, device, &dev_exists, file_path,
- file_name, name );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 248 vq_devinfo
- contrl[1] 0 Einträge in ptsin
- contrl[3] 7 Einträge in intin
- contrl[5] 4242 Unterfunktionsnummer
- contrl[6] handle
- intin[0] device VDI-Gerätenummer (0-99)
- intin[1/2] file_path Zeiger auf den Datei-Pfad
- intin[3/4] file_name Zeiger auf den Dateinamen
- intin[5/6] name Zeiger auf den Klartextnamen
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0] dev_exists 0: kein Treiber unter dieser Gerätekennung
- != 0: Treiber vorhanden
- intout[1]: dev_open 0: Treiber wurde noch nicht geöffnet
- != 0: Treiber wurde bereits geöffnet
-
- Alle zurückgelieferten Zeichenketten sind C-Strings.
-
-
- Besonderheiten einzelner Treiber
-
- ∙ Druckertreiber - Gerätekennungen 21 bis 30
-
- Bei NVDI-Druckertreibern kann bei v_opnwk() das Seitenformat und das
- GEMDOS-Ausgabegerät gesetzt werden. Zusätzlich zu den normalen Eingaben bei
- v_opnwk() müssen die folgenden Parameter übergeben werden:
-
- contrl[3] 16
-
- intin[11] Seitenformat
- #define PAGE_DEFAULT 0 /* Voreinstellung benutzen */
- #define PAGE_A3 1 /* DIN A3 */
- #define PAGE_A4 2 /* DIN A4 */
- #define PAGE_A5 3 /* DIN A5 */
- #define PAGE_B5 4 /* DIN B5 */
-
- #define PAGE_LETTER 16 /* Letter size */
- #define PAGE_HALF 17 /* Half size */
- #define PAGE_LEGAL 18 /* Legal size */
- #define PAGE_DOUBLE 19 /* Double size */
- #define PAGE_BROAD 20 /* Broad sheet size */
-
- intin[12/13] Zeiger auf einen GEMDOS-Dateinamen (C-String) oder Null
- intin[14] 0 reserviert
- intin[15] 0 reserviert
-
- NICHT ZU EMPFEHLEN:
- Man kann Breite und Höhe der vom Druckertreiber zu erzeugenden Bitmap setzen,
- indem man in ptsin[0/1] Breite - 1, Höhe - 1 und in contrl[1] eine 1 einträgt
- und anschlie₧end v_opnwk() oder vq_extnd() aufruft. Dieses Verfahren ist
- NICHT ZU EMPFEHLEN, da eine Applikation nie genau abschätzen kann, wie gro₧
- die Bitmap tatsächlich sein darf, damit der Drucker sie vernünftig ausgeben
- kann.
-
- ∙ META.SYS - Gerätekennung 31
-
- Der Metafile-Treiber speichert alle an ihn gerichteten Aufrufe in einem
- GEM-Metafile, der sich im aktuellen Verzeichnis der Applikation befindet und
- als Voreinstellung den Namen GEMFILE.GEM hat. Möchte man den Namen ändern,
- sollte man direkt nach v_opnwk() die Funktion vm_filename() aufrufen, der man
- einen kompletten Dateinamen mit dem gewünschten Pfad und Namen übergeben
- sollte.
- Damit andere Programme den Metafile vernünftig darstellen können, sollten die
- Funktionen v_meta_extents(), vm_pagesize() und vm_coords() aufgerufen werden.
-
- ∙ MEMORY.SYS - Gerätekennung 61
-
- Der Treiber MEMORY.SYS stellt eine monochrome Bitmap zur Verfügung, auf die
- mit allen VDI-Befehlen zugegriffen werden kann. Die Auflösung dieser Bitmap
- wird bei v_opnwk() gesetzt. Hierzu wird in ptsin[0/1] Breite - 1 und Höhe - 1
- übergeben, contrl[1] mu₧ eine 1 enthalten. Nach v_opnwk() wird die Adresse
- der Bitmap in contrl[0/1] zurückgeliefert.
- Bei vq_extnd() kann man ebenfalls die Auflösung setzen. Au₧erdem besteht hier
- die Möglichkeit, einen eigenen Buffer zu Übergeben. In diesem Fall enthält
- contrl[3] eine 3 und intin[1/2] ist ein Zeiger auf den Buffer.
- Aufgrund der grö₧erern Flexiblität empfehlen wir OffScreenbitmaps anstelle
- des MEMORY.SYS-Treibers zu verwenden.
-
- ∙ IMG.SYS - Gerätekennung 91 bis 99
-
- Genauso wie bei den NVDI-Druckertreibern kann man hier das Seitenformat und
- den Namen der IMG-Datei setzen - s.o.
-
- Eine weitere Möglichkeit den Dateinamen zu übergeben gibt es bei vq_extnd():
-
- contrl[1] = 4;
- ptsin[2] = 1157;
- ptsin[3/4] = Zeiger auf Dateinamen (BYTE *);
- ptsin[5/6] = Zeiger auf Fehlervariable (WORD *);
- ptsin[7] = 0;
-
- ∙ Faxtreiber - meist Gerätekennung 81 bis 90
-
- Faxtreiber verhalten sich ähnlich wie Druckertreiber. Man kann bei Ihnen aber
- weder Seitenformat noch das GEMDOS-Gerät angeben. Man sollte auch nicht
- versuchen, die Grö₧e der Bitmap zu verändern.
-
-
-
-
- Farbeinstellungen
- =================
-
- ∙ SET COLOR REPRESENTATION (VDI 14)
-
- Mit dieser Funktion kann man die Farbabstufung einer Farbnummer festlegen. Die
- Intensität von Rot, Grün und Blau wird jeweils in Promille (0-1000) angegeben.
- Bei Geräten mit einer CLUT (Grafiksysteme bis 8 Planes/ 256 Farben) wirken sich
- die Einstellungen sofort auf alle Punkte aus, die bisher auf dem Bildschirm mit
- dem Farbindex <index> gezeichnet wurden.
-
- Bei mehr als 256 gleichzeitig darstellbaren Farben benutzen Grafiksysteme in der
- Regel keine CLUT sondern eine direkte RGB-Zuordnung pro Pixel (siehe hierzu auch
- vq_scrninfo()). Die einzelnen Pixel enthalten dann statt eines Farbindex einen
- direkten RGB-Wert (z.B. je 8 Bit für R,G und B und 8 Bit Overlay). Bei einer
- solchen Organisation stellt das VDI pro Workstation 256 lokale Farbstifte und
- eine Pseudo-Palette zur Verfügung, für die man mit vs_color() die Farbwerte
- setzen kann. Eine Änderung wirkt sich also erst dann aus, wenn man wieder mit
- dem Farbstift zeichnet und wirkt sich immer nur auf die mit <handle> bezeichnete
- Workstation aus.
-
- Dekl.: void vs_color( WORD handle, WORD index, RGB1000 *rgb_in );
- Aufruf: vs_color( handle, index, &rgb_in );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 14 vs_color
- contrl[1] 0 Einträge in ptsin
- contrl[3] 4 Einträge in intin
- contrl[6] handle
- intin[0] index Farbnummer
- intin[1..3] rgb_in Farbintensitäten von Rot, Grün, Blau
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ INQUIRE COLOR REPRESENTATION (VDI 26)
-
- "INQUIRE COLOR REPRESENTATION" gibt Auskunft über die eingestellten
- Farbintensitäten, wobei die Möglichkeit besteht, zwischen der übergebenen und
- der tatsächlich eingestellten Intensität zu unterscheiden.
-
- Dekl.: WORD vq_color( WORD handle, WORD color_index, WORD flag,
- RGB1000 *rgb_out );
- Aufruf: valid = vq_color( handle, color_index, set_flag, &rgb_out );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 26 vq_color
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] color_index Farbnummer
- intin[1] flag Flag für Art der Intensität
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 4 Einträge in intout
- intout[0] valid Farbindex au₧erhalb der Grenzen
- intout[1..3] rgb_out Intensität von Rot, Grün und Blau
-
- Bedeutung von flag:
- 0: es wird die vom Anwender bei vs_color übergebene Farbintensität
- zurückgegeben.
- 1: es wird die tatsächlich eingestellte Farbintensität zurückgegeben
-
- Bemerkung:
- Die an vs_color übergebene und die eingestellte Farbintensität können bei
- Systemen mit einer CLUT voneinander abweichen, wenn die Anzahl der möglichen
- Farbabstufungen zu klein ist. Bei Direct-RGB (keine CLUT) wird meistens die
- tatsächlich eingestellte Intensität auch als die vom Anwender übergebene
- Intensität zurückgeliefert, da die Anzahl der Abstufungen ausreichend gro₧ ist.
-
-
- ∙ SET CALIBRATION (VDI 5, ESCAPE 76)
-
- Mit SET CALIBRATION kann man die Farbkalibration ein- oder ausschalten und kann
- eine Kalibrationstabelle übergeben. Eine Kalibrationstabelle besteht aus 1001
- RGB-Einträgen, die für den Wertebereich 0 bis 1000 Promille jedem Eingabewert
- einen korrigierten Promille-Wert zuordnet. Bevor man diese Funktion aufruft,
- sollte man mit vq_clibrate() feststellen, ob sie überhaupt vorhanden ist.
-
- Dekl.: WORD vs_calibrate( WORD handle, WORD flag, RGB1000 *table );
- Aufruf: cal_flag = vs_calibrate( handle, flag, &table );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 v_escape()
- contrl[1] 0 Einträge in ptsin
- contrl[3] 3 Einträge in intin
- contrl[5] 76 Unterfunktionsnummer vs_calibrate()
- contrl[6] handle
- intin[0..1] table Zeiger auf Kalibrationstabelle oder 0L
- intin[2] flag Kalibration aus (0) oder ein (1)
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] cal_flag Kalibration aus (0) oder ein (1)
-
- Bemerkung:
- Die Farbkalibration ist im gesamten System für den mit <handle> bezeichneten
- Treiber gültig. Daher sollte sie nicht von einzelnen Anwendungen, sondern nur
- durch ein CPX-Modul oder Accessory eingestellt werden.
-
-
- ∙ INQUIRE CALIBRATION (VDI 5, ESCAPE 77)
-
- Diese Funktion liefert zurück, ob Funktionen zur Kalibrierung vorhanden sind und
- ob die Kalibrierung eingeschaltet ist. Wenn contrl[4] einen 0 enthält, wird
- Kalibrierung nicht unterstützt.
-
- Dekl.: WORD vq_calibrate( WORD handle, WORD *flag );
- Aufruf: exists = vq_calibrate( handle, &flag );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 v_escape()
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 77 Unterfunktionsnummer vq_calibrate()
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] exists Einträge in intout (0 oder 1)
- intout[0] flag Kalibration aus (0) oder ein (1)
-
-
-
-
-
- Verknüpfung und Zeichenbereich
- ==============================
-
- ∙ SET WRITING MODE (VDI 32)
-
- Diese Funktion wählt die Verknüpfung der Grafikoperationen aus. Bei Übergabe
- eines nicht vorhandenen Modus wird Modus 1 (REPLACE) angewählt.
-
- Dekl.: WORD vswr_mode( WORD handle, WORD mode );
- Aufruf: set_mode = vswr_mode( handle, mode );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 32 vswr_mode
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] mode gewünschter Verknüpfungsmodus
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_mode ausgewählter Verknüpfungsmodus
-
- Bedeutung von mode:
- 1, REPLACE: Alles, was sich unter dem Grafik-Element befindet, wird
- überdeckt.
- 2, TRANSPARENT: Nur die gesetzen Pixel des Grafik-Elementes überdecken den
- Hintergrund.
- 3, XOR: Pixel des Grafik-Elementes darunterliegende Pixel werden
- mit einer XOR-Funktion verknüpft.
- 4, REV. TRANSPARENT: Die nicht gesetzten Pixel des Grafik-Elements überdecken
- den Hintergrund.
-
-
- ∙ SET CLIPPING RECTANGLE (VDI 129)
-
- Mit dieser Funktion kann man den Arbeitsbereich der Grafikoperationen
- begrenzen oder freigeben. Ist der Arbeitsbereich begrenzt worden, so werden
- überstehende Teile nicht ausgegeben.
-
- Dekl.: void vs_clip( WORD handle, WORD clip_flag, WORD *area );
- Aufruf: vs_clip( handle, clip_flag, area );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 129 vs_clip
- contrl[1] 2 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] clip_flag 0: Clipping aus, 1: Clipping an
- ptsin[0..3] area[0..3] Arbeitsbereich
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bemerkung:
- Das Clipping sollte aus Sicherheitsgründen immer eingeschaltet werden, da die
- Ausgaberoutinen beim Überschreiten der Bildschirmgrenzen sehr schnell gro₧e
- Speicherbereiche überschreiben, was zu unerfreulichen Abtürzen und Datenmüll
- führen kann.
-
- Wenn der Arbeitsbereich den ganzen Bildschirm einbeziehen soll, ist es ratsam,
- bei vs_clip() die bei v_opnvwk() erhaltenen Bildschirmausma₧e einzustellen.
-
-
-
-
- Linien und nicht gefüllte Grafikprimitive
- =========================================
-
- ∙ POLYLINE (VDI 6)
-
- "POLYLINE" zeichnet einen Linienzug. Alle angegebenen Punkte werden nacheinander
- mit Linien verbunden. Es müssen mindestens zwei Koordinatenpaare übergeben
- werden.
-
- Dekl.: void v_pline( WORD handle, WORD count, WORD *xyarr );
- Aufruf: v_pline( handle, count, xyarr );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 6 v_pline
- contrl[1] n Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0..2n-1] xyarr[0..2n-1] Koordinaten
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ OUTPUT BEZIER (VDI 6, 13)
-
- Diese Funktion zeichnet eine ungefüllte Bezierkurve.
-
- Dekl.: void v_bez( WORD handle, WORD count, WORD *xyarr, char *bezarr,
- WORD *extent,int *totpts, WORD *totmoves );
-
- Aufruf: v_bez( handle, count, xyarr, bezarr, extent, totpts, totmoves );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 6 v_bez
- contrl[1] n Einträge in ptsin
- contrl[3] (n+1)/2 Einträge in intin
- contrl[5] 13 signalisiert v_bez
- contrl[6] handle
- ptsin[0..2n-1] xyarr[0..2n-1] Koordinaten
- intin[0..(n+1)/2-1] bezarr[0..n-1] Punkttypen
-
- Ausgaben:
-
- contrl[2] 2 Einträge in ptsout
- contrl[4] 6 Einträge in intout
-
- intout[0] totpts Anzahl der berechneten Punkte
- intout[1] totmoves Anzahl der Unterbrechungen im Linienzug
- intout[2..5] reserviert
- ptsout[0..3] extent[0..3] Koordinaten des umschlie₧enden Rechtecks
-
- Bedeutung der Punkttypen:
- Bit 0: Startpunkt eines 4-Punkte Beziersegments (2 Ankerpunkte und zwei
- Richtungspunkte). Der Endpunkt eines Beziersegments kann auch der
- Startpunkt des nächsten Beziers sein - er kann aber kein "jump point"
- sein.
-
- Bit 1: "jump point". Dieser Punkt und der vorhergehende werden nicht
- verbunden. Nützlich um Enklaven oder Exklaven zu zeichnen.
-
- Bit 2-7 sind undefiniert. Ist im Punkttyp Bit 0 gelöscht, verhält sich die
- Bezierfunktion wie "POLYLINE" mit der Erweiterung, über den "jump point"
- Enklaven oder Exklaven zeichnen zu können.
-
- Bemerkung:
- Die im Byte-Array bezarr übergebenen Punkttypen müssen vom C-Binding vertauscht
- werden, da diese Funktion leider diesbezüglich kompatibel zum PC-GEM ist.
- bezarr[0] wird ins Low-Byte von intin[0] und bezarr[1] ins High-Byte von
- intin[0] geschrieben.
-
-
- ∙ ARC (VDI 11, GDP 2)
-
- "ARC" zeichnet einen Kreisbogen, dessen Start- und Endwinkel in 1/10 Grad von 0
- bis 3600 angegeben werden.
-
- Dekl.: void v_arc( WORD handle, WORD x, WORD y, WORD radius,
- WORD begang, WORD endang );
- Aufruf: v_arc( handle, x, y, radius, begang, endang );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 4 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[5] 2 v_arc
- contrl[6] handle
- intin[0] begang Startwinkel
- intin[1] endang Endwinkel
- ptsin[0] x
- ptsin[1] y
- ptsin[6] radius Radius
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ELLIPTICAL ARC (VDI 11, GDP 6)
-
- "ELLIPTICAL ARC" zeichnet einen Ellipsenbogenausschnitt. Die Winkelangabe
- erfolgt in 1/10 Grad von 0 bis 3600.
-
- Dekl.: void v_ellarc( WORD handle, WORD x, WORD y, WORD x_radius,
- WORD y_radius, WORD begang, WORD endang );
- Aufruf: v_ellarc( handle, x, y, x_radius, y_radius, begang, endang );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 2 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[5] 6 v_ellarc
- contrl[6] handle
- intin[0] begang Startwinkel
- intin[1] endang Endwinkel
- ptsin[0] x
- ptsin[1] y
- ptsin[2] xradius Radius in horizontaler Richtung
- ptsin[3] yradius Radius in vertikaler Richtung
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ROUNDED RECTANGLE (VDI 11, GDP 8)
-
- Ein Rechteck mit gerundeten Ecken wird gezeichnet.
-
- Dekl.: void v_rbox( WORD handle, WORD *rect );
- Aufruf: v_rbox( handle, rect );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 2 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 8 v_rbox
- contrl[6] handle
- ptsin[0..3] rect[0..3] Koordinaten
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ENABLE BEZIER CAPABILITIES (VDI 11, GDP 13)
-
- Diese Funktion ist aus Kompatibilitätsgründen vorhanden. Sie sorgt dafür, da₧
- Aufrufe von v_pline() ohne die Unterfunktionsnummer 13 als Aufrufe von v_bez()
- und Aufrufe von v_fillarea() ohne die Unterfunktiosnummer als Aufrufe von
- v_bez_fill() aufgefa₧t werden. v_bez_on() wird normalerweise nur verwendet, um
- festzustellen, ob Beziers vorhanden sind - in diesem Fall ist retval ungleich 0
- (vorher sollte man intout[0] auf 0 setzen!).
-
- Dekl.: WORD v_bez_on( WORD handle );
- Aufruf: retval = v_bez_on( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 1 Einträge in ptsin - signalisiert v_bez_on
- contrl[3] 0 Einträge in intin
- contrl[5] 13 v_bez_on
- contrl[6] handle
-
- Ausgaben:
-
- intout[0] retval Beziertiefe
-
- Bedeutung von retval:
- <retval> kann einen Wert von 0 (keine Beziers) bis 7 (maximale Qualität)
- annehmen, der ein ungefähres Ma₧ für die Kurvenqualität darstellt -
- normalerweise kann man von diesem Wert nur ableiten, ob Beziers vorhanden sind.
-
-
- ∙ DISABLE BEZIER CAPABILITIES (VDI 11, GDP 13)
-
- Diese Funktion ist aus Kompatibilitätsgründen vorhanden. Sie schaltet die
- Sonderbehandlung für v_bez() und v_bez_fill() aus.
-
- Dekl.: void v_bez_off( WORD handle );
- Aufruf: v_bez_off( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 0 Einträge in ptsin - signalisiert v_bez_off
- contrl[3] 0 Einträge in intin
- contrl[5] 13 v_bez_off
- contrl[6] handle
-
- Ausgaben:
-
- -
-
-
- ∙ SET BEZIER QUALITY (VDI 5, ESCAPE 99)
-
- Mit dieser Funktion wird die Qualität der Bezierfunktionen eingestellt. Die
- Qualität kann in Prozent von 0 - 100 eingestellt werden.
-
- Dekl.: WORD v_bez_qual( WORD handle, WORD qual, WORD *set_qual );
- Aufruf: v_bez_qual( handle, qual, &set_qual );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 3 Einträge in intin
- contrl[5] 99
- contrl[6] handle
- intin[0] 32 intin[0..1] signaliseren v_bez_qual()
- intin[1] 1
- intin[2] qual gewünschte Bezierqualität in Prozent
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_qual eingestellte Bezierqualität in Prozent
-
-
- ∙ SET POLYLINE LINE TYPE (VDI 15)
-
- Mit "SET POLYLINE LINE TYPE" kann man den Linientyp festlegen. Wenn der
- gewünschte Linientyp nicht einstellbar ist, wird der Linientyp 1 (durchgehende
- Linie) eingestellt.
-
- Dekl.: WORD vsl_type( WORD handle, WORD type );
- Aufruf: set_type = vsl_type( handle, type );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 15 vsl_type
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] type gewünschter Linientyp
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_type ausgewählter Linientyp
-
- Bedeutung von type:
- 1: %1111111111111111 (durchgehende Linie)
- 2: %1111111111110000 (langer Strich)
- 3: %1110000011100000 (Punkte)
- 4: %1111111100011000 (Strich, Punkt)
- 5: %1111111100000000 (Strich)
- 6: %1111000110011000 (Strich, Punkt, Punkt)
- 7: benutzerdefiniert über vsl_udsty()
-
-
- ∙ SET POLYLINE LINE WIDTH (VDI 16)
-
- Diese Funktion setzt die Linienbreite, wobei nur ungerade Werte eingestellt
- werden (ggf. wird auf den nächstkleineren Wert gerundet). Linien die breiter als
- 1 Pixel sind werden von den meisten Treibern nur ohne Muster gezeichnet.
-
- Dekl.: WORD vsl_width( WORD handle, WORD width );
- Aufruf: set_width = vsl_width( handle, width );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 16 vsl_width
- contrl[1] 1 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0] width gewünschte Linienbreite
-
- Ausgaben:
-
- contrl[2] 1 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- ptsout[0] set_width ausgewählte Linienbreite
-
- Bemerkung:
- Die Linienbreite orientiert sich immer an der horizontalen Pixelgrö₧e.
-
-
- ∙ SET POLYLINE COLOR INDEX (VDI 17)
-
- Der Farbindex für Linien wird gesetzt. Bei ungültigem Index wird der Farbindex 1
- gesetzt.
-
- Dekl.: WORD vsl_color( WORD handle, WORD color_index );
- Aufruf: set_color = vsl_color( handle, color_index );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 17 vsl_color
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] color_index gewünschte Linienfarbe
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_color ausgewählte Linienfarbe
-
-
- ∙ INQUIRE CURRENT POLYLINE ATTRIBUTES (VDI 35)
-
- Diese Funktion gibt die aktuellen Linienattribute zurück.
-
- Dekl.: void vql_attributes( WORD handle, WORD *attrib );
- Aufruf: vql_attributes( handle, attrib );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 35 vql_attributes
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 1 Einträge in ptsout
- contrl[4] 5 Einträge in intout
- intout[0] attrib[0] Linientyp
- intout[1] attrib[1] Linienfarbe
- intout[2] attrib[2] Schreibmodus
- intout[3] attrib[4] Linienanfangsform
- intout[4] attrib[5] Linienendform
- ptsout[0] attrib[3] Linienbreite
-
-
- ∙ SET POLYLINE END STYLES (VDI 108)
-
- Das Aussehen der Linienenden wird mit "SET POLYLINE END STYLES" bestimmt. Bei
- ungültigen Angaben wird das betreffende Linienende eckig.
-
- Dekl.: void vsl_ends( WORD handle, WORD beg_style, WORD end_style );
- Aufruf: vsl_ends( handle, beg_style, end_style );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 108 vsl_ends
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] beg_style Aussehen des Linienanfangs
- intin[1] end_style Aussehen des Linienendes
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bedeutung von beg_style und end_style:
- 0: eckig
- 1: Pfeil
- 2: abgerundet
-
-
- ∙ SET USER-DEFINED LINE STYLE PATTERN (VDI 113)
-
- Mit dieser Funktion legt man den benutzerdefinierten Linientyp von "SET POLYLINE
- LINE TYPE" fest.
-
- Dekl.: void vsl_udsty( WORD handle, WORD pattern );
- Aufruf: vsl_udsty( handle, pattern );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 113 vsl_udsty
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] pattern benutzerdefiniertes Linienmuster
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
-
-
- Gefüllte Grafikprimitive
- ========================
-
- ∙ FILLED AREA (VDI 9)
-
- Durch "FILLED AREA" wird eine beliebige, gefüllte Fläche gezeichnet.
-
- Dekl.: void v_fillarea( WORD handle, WORD count, WORD *xyarr );
- Aufruf: v_fillarea( handle, count, xyarr );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 9 v_fillarea
- contrl[1] n Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0..2n-1] xyarr[0..2n-1] Koordinaten
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ OUTPUT FILLED BEZIER (VDI 9, 13)
-
- Diese Funktion zeichnet eine gefüllte Bezierkurve.
-
- Dekl.: void v_bez_fill( WORD handle, WORD count, WORD *xyarr, char *bezarr,
- WORD *extent,int *totpts, WORD *totmoves );
- Aufruf: v_bez_fill( handle, count, xyarr, bezarr, extent, totpts, totmoves );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 9 v_bez_fill
- contrl[1] n Einträge in ptsin
- contrl[3] (n+1)/2 Einträge in intin
- contrl[5] 13 signalisiert v_bez_fill
- contrl[6] handle
- ptsin[0..2n-1] xyarr[0..2n-1] Koordinaten
- intin[0..(n+1)/2-1] bezarr[0..n-1] Punkttypen
-
- Ausgaben:
-
- contrl[2] 2 Einträge in ptsout
- contrl[4] 6 Einträge in intout
- intout[0] totpts Anzahl der berechneten Punkte
- intout[1] totmoves Anzahl der Unterbrechungen im Linienzug
- intout[2..5] reserviert
- ptsout[0..3] extent[0..3] Koordinaten des umschlie₧enden Rechtecks
-
- Bedeutung der Punkttypen:
- Bit 0: Startpunkt eines 4-Punkte Beziersegments (2 Ankerpunkte und zwei
- Richtungspunkte). Der Endpunkt eines Beziersegments kann auch der
- Startpunkt des nächsten Beziers sein - er kann aber kein "jump point"
- sein.
-
- Bit 1: "jump point". Dieser Punkt und der vorhergehende werden nicht
- verbunden. Nützlich um Enklaven oder Exklaven zu zeichnen.
-
- Bit 2-7 sind undefiniert. Ist im Punkttyp Bit 0 gelöscht, verhält sich die
- Bezierfunktion wie "FILLED AREA" mit der Erweiterung, über den "jump point"
- Enklaven oder Exklaven zeichnen zu können.
-
- Bemerkung:
- Die im Byte-Array bezarr übergebenen Punkttypen müssen vom C-Binding vertauscht
- werden, da diese Funktion leider diesbezüglich kompatibel zum PC-GEM ist.
- bezarr[0] wird ins Low-Byte von intin[0] und bezarr[1] ins High-Byte von
- intin[0] geschrieben.
-
-
- ∙ BAR (VDI 11, GDP 1)
-
- Von dieser Funktion wird ein ausgefülltes Rechteck gezeichnet. Im Gegensatz zu
- "FILLED RECTANGLE" wird eine Umrahmung ausgegeben.
-
- Dekl.: void v_bar( WORD handle, WORD *rect );
- Aufruf: v_bar( handle, rect );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 2 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 1 v_bar
- contrl[6] handle
- ptsin[0..3] rect[0..3] Koordinaten des Rechtecks
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ PIE (VDI 11, GDP 3)
-
- Diese Funktion zeichnet einen Kreisflächenausschnitt. Die Winkel werden in
- 1/10 Grad von 0 bis 3600 angegeben.
-
- Dekl.: void v_pieslice( WORD handle, WORD x, WORD y, WORD radius,
- WORD begang, WORD endang );
- Aufruf: v_pieslice( handle, x, y, radius, begang, endang );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 4 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[5] 3 v_pieslice
- contrl[6] handle
- intin[0] begang Startwinkel
- intin[1] endang Endwinkel
- ptsin[0] x
- ptsin[1] y
- ptsin[6] radius Radius
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ CIRCLE (VDI 11, GDP 4)
-
- Die Funktion "CIRCLE" zeichnet eine Kreisfläche.
-
- Dekl.: void v_circle( WORD handle, WORD x, WORD y, WORD radius );
- Aufruf: v_circle( handle, x, y, radius );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 3 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[5] 4 v_circle
- contrl[6] handle
- intin[0] begang Startwinkel
- intin[1] endang Endwinkel
- ptsin[0] x
- ptsin[1] y
- ptsin[4] radius Radius
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ELLIPSE (VDI 11, GDP 5)
-
- Diese Funktion zeichnet eine Ellipsenfläche.
-
- Dekl.: void v_ellipse( WORD handle, WORD x, WORD y,
- WORD x_radius, WORD y_radius );
- Aufruf: v_ellipse( handle, x, y, x_radius, y_radius );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 2 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 5 v_ellipse
- contrl[6] handle
- ptsin[0] x
- ptsin[1] y
- ptsin[2] x_radius Radius in horizontaler Richtung
- ptsin[3] y_radius Radius in vertikaler Richtung
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ELLIPTICAL PIE (VDI 11, GDP 7)
-
- Die Funktion "ELLIPTICAL PIE" zeichnet einen Ellipsenflächenausschnitt. Die
- Angabe der Winkel geschieht in Zehntelgrad von 0 bis 3600.
-
- Dekl.: void v_ellpie( WORD handle, WORD x, WORD y, WORD x_radius,
- WORD y_radius, WORD begang, WORD endang );
- Aufruf: v_ellpie( handle, x, y, x_radius, y_radius, begang, endang );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 2 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[5] 7 v_ellpie
- contrl[6] handle
- intin[0] begang Startwinkel
- intin[1] endang Endwinkel
- ptsin[0] x
- ptsin[1] y
- ptsin[2] x_radius Radius in horizontaler Richtung
- ptsin[3] y_radius Radius in vertikaler Richtung
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ FILLED ROUNDED RECTANGLE (VDI 11, GDP 9)
-
- Diese Funktion zeichnet ein ausgefülltes, abgerundetes Reckteck.
-
- Dekl.: void v_rfbox( WORD handle, WORD *rect );
- Aufruf: v_rfbox( handle, rect );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 2 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 9 v_rfbox
- contrl[6] handle
- ptsin[0..3] rect[0..3] Koordinaten
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ SET FILL INTERIOR INDEX (VDI 23)
-
- Der Fülltyp kann mit dieser Funktion ausgewählt werden. Bei Übergabe eines
- ungültigem Fülltyps wird der Typ 0 (leer) eingestellt.
-
- Dekl.: WORD vsf_interior( WORD handle, WORD interior );
- Aufruf: set_interior = vsf_interior( handle, interior );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 23 vsf_interior
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] interior gewünschter Fülltyp
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_interior ausgewählter Fülltyp
-
- Bedeutung von interior:
- 0: leer
- 1: voll
- 2: gemustert
- 3: schraffiert
- 4: benutzerdefiniert
-
-
- ∙ SET FILL STYLE INDEX (VDI 24)
-
- Mit dieser Funktion wird der zum Fülltyp gehörende Füllindex gesetzt.
-
- Dekl.: WORD vsf_style( WORD handle, WORD style_index );
- Aufruf: set_style = vsf_style( handle, style_index );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 24 vsf_style
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] style_index gewünschter Füllindex
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_sytle ausgewählter Füllindex
-
-
- ∙ SET FILL COLOR INDEX (VDI 25)
-
- Der Farbindex für Füllmuster wird mit dieser Funktion ausgewählt. Bei einem
- ungültigen Index wird Farbindex 1 eingestellt. Der Farbindex hat keine
- Auswirkung auf mehrfarbige Muster (siehe auf vsf_udpat); er sollte hier auf 1
- gesetzt werden.
-
- Dekl.: WORD vsf_color( WORD handle, WORD color_index );
- Aufruf: set_color = vsf_color( handle, color_index );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 25 vsf_color
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] color_index gewünschter Farbindex
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_color ausgewählter Farbindex
-
-
- ∙ INQUIRE CURRENT FILL AREA ATTRIBUTES (VDI 37)
-
- Diese Funktion gibt Auskunft über die aktuellen Füllattribute.
-
- Dekl.: void vqf_attributes( WORD handle, WORD *attrib );
- Aufruf: vqf_attributes( handle, attrib );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 37 vqm_attributes
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 5 Einträge in intout
- intout[0] attrib[0] Fülltyp
- intout[1] attrib[1] Füllfarbe
- intout[2] attrib[2] Füllmusterindex
- intout[3] attrib[3] Schreibmodus
- intout[4] attrib[4] Umrahmungs-Flag
-
-
- ∙ CONTOUR FILL (VDI 103)
-
- Diese Funktion füllt vom Startpunkt aus eine Fläche, wobei diese Fläche durch
- den Bildrand oder eine andere Farbe begrenzt wird. Gerätetreiber, die mit einer
- Display-List arbeiten (Druckertreiber, IMG-Treiber,...) unterstützen
- v_contourfill() nicht oder können sie nur dann ausführen, wenn genügend Speicher
- vorhanden ist.
-
- Dekl.: void v_contourfill( WORD handle, WORD x, WORD y, WORD color_index );
- Aufruf: v_contourfill( handle, x, y, color_index );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 103 v_contourfill
- contrl[1] 1 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] color_index Farbindex
- ptsin[0] x
- ptsin[1] y
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ SET FILL PERIMETER VISIBILITY (VDI 104)
-
- Die Umrahmung einer gefüllten Fläche (Rechteck, Polygon, Ellipse, ...) kann mit
- dieser Funktion ein- oder ausgeschaltet werden.
-
- Dekl.: WORD vsf_perimeter( WORD handle, WORD flag );
- Aufruf: set_perimeter = vsf_perimter( handle, flag );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 104 vsf_perimeter
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] flag gewünschtes Umrahmungs-Flag
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_perimeter ausgewähltes Umrahmungs-Flag
-
- Bedeutung von flag:
- 0: keine Umrahmung
- 1: Umrahmung
-
- ∙ SET USER-DEFINED FILL PATTERN (VDI 112)
-
- Mit "SET USER-DEFINED FILL PATTERN" kann ein benutzerdefiniertes Füllmuster
- von 16*16 Pixel (16 Worte pro Musterebene) festgelegt werden. Mehrfarbige Muster
- werden im Standardformat übergeben und müssen die gleiche Ebenenanzahl haben wie
- der Bildschirm. Die Ausnahme von dieser Regel sind die Direct-RGB-Modi (mehr als
- 8 Ebenen mit direkter RGB-Zuordnung) wie True-Color. Hier wird das Muster immer
- als True-Color-Muster mit 32-Bit-Pixeln (xRGB) übergeben.
-
- Dekl.: void vsf_udpat( WORD handle, WORD *pattern, WORD planes );
- Aufruf: vsf_udpat( handle, pattern, planes );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 112 vsf_udpat
- contrl[1] 0 Einträge in ptsin
- contrl[3] 16n Einträge in intin (Musterebenen*16)
- contrl[6] handle
- intin[0..16n-1] pattern[0..16n-1] Musterebenen
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bemerkung:
- Bei Mehrfarbmustern sollte man die Füllfarbe auf 1 setzen und als Schreibmodus
- REPLACE anwählen.
-
-
- ∙ FILLED RECTANGLE (VDI 114)
-
- "FILLED RECTANGLE" zeichnet ein ausgefülltes Rechteck ohne Umrahmung.
-
- Dekl.: void vr_recfl( WORD handle, WORD *rect );
- Aufruf: vr_recfl( handle, rect );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 114 vr_recfl
- contrl[1] 2 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0..3] rect[0..3] Koordinaten
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
-
-
- Marker
- ======
-
- ∙ POLYMARKER (VDI 7)
-
- Diese Funktion zeichnet Marker an den angegebenen Stellen.
-
- Dekl.: void v_pmarker( WORD handle, WORD count, WORD *xyarr );
- Aufruf: v_pmarker( handle, count, xyarr );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 7 v_pmarker
- contrl[1] n Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0..2n-1] xyarr[0..2n-1] Koordinaten
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ SET POLYMARKER TYPE (VDI 18)
-
- Mit dieser Funktion wird der gewünschte Marker ausgewählt. Im Fall einer
- fehlerhaften Markernummer wird Markertyp 3 benutzt.
-
- Dekl.: WORD vsm_type( WORD handle, WORD type );
- Aufruf: set_type = vsm_type( handle, type );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 18 vsm_type
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] type gewünschter Markertyp
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_type ausgewählter Markertyp
-
- Bedeutung von type:
- 1: Punkt
- 2: Plus
- 3: Sternchen
- 4: Quadrat
- 5: Kreuz
- 6: Raute
-
-
- ∙ SET POLYMARKER HEIGHT (VDI 19)
-
- Die Markergrö₧e kann mittels "SET POLYMARKER HEIGHT" eingestellt werden. Falls
- die eingestellte Höhe nicht existiert, wird die nächstkleinere Höhe eingestellt.
- Der Markertyp 1 (Punkt) hat immer die Höhe 1.
-
- Dekl.: WORD vsm_height( WORD handle, WORD height );
- Aufruf: set_height = vsm_height( handle, height );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 19 vsm_height
- contrl[1] 1 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[1] height gewünschte Markerhöhe
-
- Ausgaben:
-
- contrl[2] 1 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- ptsout[0] set_width ausgewählte Markerbreite
- ptsout[1] set_height ausgewählte Markerhöhe
-
-
- ∙ SET POLYMARKER COLOR INDEX (VDI 20)
-
- Diese Funktion setzt den Farbindex der Marker. Bei ungültigem Index wird der
- Farbindex 1 gesetzt.
-
- Dekl.: WORD vsm_color( WORD handle, WORD color_index );
- Aufruf: set_color = vsm_color( handle, color_index );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 20 vsm_color
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] color_index gewünschte Markerfarbe
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_color ausgewählte Markerfarbe
-
-
- ∙ INQUIRE CURRENT POLYMARKER ATTRIBUTES (VDI 36)
-
- "INQUIRE CURRENT POLYMARKER ATTRIBUTES" gibt Auskunft über die eingestellten
- Markerattribute.
-
- Dekl.: void vqm_attributes( WORD handle, WORD *attrib );
- Aufruf: vqm_attributes( handle, attrib );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 36 vqm_attributes
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 1 Einträge in ptsout
- contrl[4] 3 Einträge in intout
- intout[0] attrib[0] Markertyp
- intout[1] attrib[1] Markerfarbe
- intout[2] attrib[2] Schreibmodus
- ptsout[0] attrib[4] Markerbreite
- ptsout[1] attrib[3] Markerhöhe
-
-
-
-
- Textausgaben mit Bitmap- und Vektorfonts
- ========================================
-
- Zunächst ein paar generelle Erklärungen und Anmerkungen zum Thema Text...
-
- Font-ID und Index:
-
- Der Index eines Fonts ist eine Zahl zwischen 1 und der verfügbaren Fontanzahl.
- Je nach Anzahl der auf dem jeweiligen Rechner installierten Fonts hat ein Font
- wie z.B. "Swiss 721" einen unterschiedlichen Index.
- Die Font-ID ist dagegen eine Kennung, die grundsätzlich für einen Font
- unabhängig vom System immer gleich ist - für "Swiss 721" z.B. 5003. Ausnahmen
- von dieser Regel sind aber bei Fonts möglich, die keine verwendbare Font-ID
- haben. In diesem Fall wird versucht, eine eindeutige ID zu erzeugen. Da es aber
- möglich ist, da₧ eine derart erzeugte ID für einen Font nicht auf allen Systemen
- identisch ist, sollten Programme für eine eindeutige Zuordnung des Fonts au₧er
- der ID auch den Namen abspeichern.
-
- Vektorfont oder Bitmap-Font?
-
- Wenn es sich bei einem eingstellten Font um einen Vektorfont handelt, liefert
- vqt_name() 34 Einträge in intout zurück und intout[33] enthält einen Wert
- ungleich 0. Ist intout[33] 0 oder werden nur 33 Einträge zurückgeliefert,
- handelt es sich um einen Bitmap-Font.
-
- Äquidistante Fonts (monospaced):
-
- Für manche Applikationen ist es zweckmä₧ig, bei der Ausgabe nur äquidistante
- Fonts zu benutzen. Das sinnvollste Vorgehen dafür sieht wie folgt aus:
-
- a) Wenn vqt_name() in erweiterter Form (35 Einträge in intout) vorhanden ist,
- sollte einfach das entsprechende Bit in intout[34] abgetestet werden.
- b) Wenn vqt_name() nur die Information bietet, da₧ es sich um einen Vektorfont
- handelt (34 Einträge in intout, intout[33] != 0), sollte für Vektorfonts
- vqt_fontheader() aufgerufen und Bit 1 von FH_CLFGS geprüft werden.
- c) Wenn es sich nicht um einen Vektorfont handelt und a) und b) nicht zutreffen,
- müssen die Zeichenbreiten einzeln mit vqt_width() erfragt und miteinander
- verglichen werden.
-
- Wer äquidistante Vektorfonts mit v_ftext() ausgibt, darf als Breite nicht mit
- den Ausgaben von vst_height() oder vqt_width() rechnen, sondern mu₧ sie bei
- vqt_advance() erfragen, da bei v_ftext() immer mit Breiten in 1/65536 Pixeln
- positioniert wird. Bei Ausgabe über v_gtext() sind die Rückgaben von vqt_width()
- zutreffend.
-
- Höhe und Breite von Vektorfonts:
-
- Die Höhe und Breite eines Vektorfonts kann mit den Funktionen vst_arbpt() und
- und vst_setsize() in 1/65536 pt eingestellt werden (1 pt ≈ 1/72 Zoll ≈ 353 µm).
- Bei negativer Höhe oder Breite wird der Text an der jeweiligen Achse gespiegelt.
-
- Pair- und Track-Kerning:
-
- Sowohl Pair- als auch Track-Kerning sind nach dem Öffnen einer Workstation
- ausgestellt. Um eine bessere Textdarstellung zu haben, sollte das Pair-Kerning
- daher mit vst_kern() eingeschaltet werden.
-
- Positionierung von Vektortext:
-
- Bei der Ausgabe von Vektorfonts wird innerhalb des VDIs mit Schrittweiten von
- 1/65536 Pixel Auflösung gerechnet, um unabhängig vom verwendeten Ausgabegerät
- und dessen tatsächlicher Auflösung eine gleichbleibende Zeichenpositionierung zu
- gewährleisten. Um die Bitmaps für die einzelnen Zeichen auszugeben, werden diese
- Festkommawerte in Pixel umgerechnet, indem 32768 hinzuaddiert und anschlie₧end
- durch 65536 geteilt wird.
-
- Wenn das Track-Kerning eingeschaltet ist, wird zu jeder Zeichenposition der bei
- vqt_trackkern() zu erfragende Offset addiert.
-
- Bei eingeschaltetem Pair-Kerning wird zu jeder Zeichenposition der von
- vqt_pairkern() zurückgelieferte Offset addiert.
-
- Pair- und Track-Kerning und die Positionierung in 1/65536 Pixeln werden nur
- eingesetzt, wenn v_ftext() aufgerufen wird! Bei v_gtext() verhalten sich
- Vektorfonts weitgehend wie Bitmap-Fonts und weder Kerning noch genaue
- Positionierung werden benutzt.
-
- Grö₧e von Vektorfonts/Pixelgrö₧en:
-
- Die meisten Bildschirmtreiber liefern eine Auflösung von ≈ 91 dpi zurück, nach
- der sich auch die Grö₧e der Vektorfonts richtet. Da nicht bei jedem Schirm 91
- dpi vorhanden sind, sollten Programme bei Textdarstellung auf dem Bildschirm
- nicht fest mit diesem Wert rechnen, sondern die Ausgaben von v_opnwk(),
- v_opnvwk(), vq_extnd() und v_opnbm() beachten. Andernfalls können bei
- abweichenden Pixelgrö₧en Darstellungsfehler auftreten.
- Beim Ausdruck sollten die genaueren Pixelgrö₧en bei vq_extnd() beachtet werden,
- damit die Textpositionierung möglichst genau ist.
-
-
- ∙ TEXT (VDI 8)
-
- "TEXT" gibt eine Zeichenkette mit Attributen aus. Ist ein Vektorfont
- eingestellt, so wird weder Pair- noch Track-Kerning beachtet. Die
- Zeichenpositionierung erfolgt au₧erdem pixelweise, d.h. vqt_width() liefert
- hierfür die passenden Schrittgrö₧en.
-
- Dekl.: void v_gtext( WORD handle, WORD x, WORD y, BYTE *string );
- Aufruf: v_gtext( handle, x, y, string );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 8 v_gtext
- contrl[1] 1 Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[6] handle
- intin[0..n-1] string[0..n-1] Zeichenkette
- ptsin[0] x
- ptsin[1] y
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ JUSTIFIED GRAPHICS TEXT (VDI 11, GDP 10)
-
- "JUSTIFIED GRAPHICS TEXT" ermöglicht die Ausgabe einer Zeichenkette mit
- Attributen und Dehnung oder Stauchung auf die gewünschte Länge, wobei entweder
- Wort- oder Zeichenzwischenräume gedehnt werden können. Bei Vektorfonts bezieht
- sich die Längenangabe auf die Summation der Zeichenbreiten - Überhänge nach
- links und rechts werden nicht berücksichtigt.
-
- Dekl.: void v_justified( WORD handle,int x, WORD y, BYTE *string, WORD length,
- WORD word_space, WORD char_space );
- Aufruf: v_justified( handle, x, y, string, length, word_space, char_space );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 11 GDP
- contrl[1] 2 Einträge in ptsin
- contrl[3] n+2 Einträge in intin
- contrl[5] 10 v_justified
- contrl[6] handle
- intin[0] word_space <> 0: Wortzwischenräume dehnen
- intin[1] char_space <> 0: Zeichenzwischenräume dehnen
- intin[2..n+1] string[0..n-1] Zeichenkette
- ptsin[0] x
- ptsin[1] y
- ptsin[2] length horizontale Textlänge in Pixeln
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ SET CHARACTER HEIGHT, ABSOLUTE MODE (VDI 12)
-
- Die Zeichenhöhe von der Basislinie bis zur Zeichenzellenobergrenze wird mit
- dieser Funktion gesetzt. Bei Bitmapfonts wird, wenn die gewünschte Höhe nicht
- als Bitmap vorliegt, vergrö₧ert oder verkleinert. Bei Vektorfonts stellen die
- ausgegebenen Breiten char_width und cell_width gerundete Werte dar.
-
- Dekl.: void vst_height( WORD handle, WORD height, WORD *char_width,
- WORD *char_height, WORD *cell_width, WORD *cell_height );
- Aufruf: vst_height( handle, height, &char_width, &char_height, &cell_width,
- &cell_height );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 12 vst_height
- contrl[1] 1 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[1] height gewünschte Zeichenhöhe
-
- Ausgaben:
-
- contrl[2] 2 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- ptsout[0] char_width ausgewählte Zeichenbreite
- ptsout[1] char_height ausgewählte Zeichenhöhe
- ptsout[2] cell_width ausgewählte Zeichenzellenbreite
- ptsout[3] cell_height ausgewählte Zeichenzellenhöhe
-
-
- ∙ SET CHARACTER BASELINE VECTOR (VDI 13)
-
- Mit dieser Funktion kann man die Textdrehung in 1/10 Grad einstellen. Für
- Bitmapfonts ist die Rotation nur in 90-Grad-Schritten möglich; bei Vektorfonts
- stufenlos.
-
- Dekl.: WORD vst_rotation( WORD handle, WORD angle );
- Aufruf: set_angle = vst_rotation( handle, angle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 13 vst_rotation
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] angle gewünschter Rotationswinkel
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_angle ausgewählter Rotationswinkel
-
-
- ∙ SET TEXT FACE (VDI 21)
-
- Diese Funktion wählt den Zeichensatz <font> aus. Sollte kein Zeichensatz mit
- dieser ID vorhanden sein, wird auf den Systemzeichensatz umgeschaltet.
-
- Dekl.: WORD vst_font( WORD handle, WORD font );
- Aufruf: set_font = vst_font( handle, font);
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 21 vst_font
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] font gewünschter Zeichensatz
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_font ausgewählter Zeichensatz
-
-
- ∙ SET GRAPHIC TEXT COLOR INDEX (VDI 22)
-
- Diese Funktion setzt die Farbe des Textes. Bei ungültigem Farbindex wird der
- Farbindex 1 gesetzt.
-
- Dekl.: WORD vst_color( WORD handle, WORD color_index );
- Aufruf: set_color = vst_color( handle, color_index );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 22 vst_color
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] color_index gewünschte Textfarbe
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_color ausgewählte Textfarbe
-
-
- ∙ INQUIRE CURRENT GRAPHIC TEXT ATTRIBUTES (VDI 38)
-
- Die gesetzten Textattribute werden von dieser Funktion geliefert.
-
- Dekl.: void vqt_attributes( WORD handle, WORD *attrib );
- Aufruf: vqt_attributes( handle, attrib );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 38 vqt_attributes
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 2 Einträge in ptsout
- contrl[4] 6 Einträge in intout
- intout[0] attrib[0] Zeichensatznummer
- intout[1] attrib[1] Textfarbe
- intout[2] attrib[2] Textrotation in 1/10 Grad
- intout[3] attrib[3] horizontale Ausrichtung
- intout[4] attrib[4] vertikale Ausrichtung
- intout[5] attrib[5] Schreibmodus
- ptsout[0] attrib[6] Zeichenbreite
- ptsout[1] attrib[7] Zeichenhöhe
- ptsout[2] attrib[8] Zeichenzellenbreite
- ptsout[3] attrib[9] Zeichenzellenhöhe
-
- Bemerkung:
- Das ATARI-VDI gibt fehlerhafterweise in intout[5] den Schreibmodus-1 zurück. Mit
- NVDI geschieht das nur bei eingeschalteter Fehlerkompatibilität.
-
-
- ∙ SET GRAPHIC TEXT ALIGNMENT (VDI 39)
-
- Die horizontale und vertikale Ausrichtung eines Textes kann mit dieser Funktion
- beeinflu₧t werden. Bei falscher Eingabe für horizontale Ausrichtung wird der
- Text linksjustiert. Die fehlerhafte Angabe der vertikalen Ausrichtung bewirkt
- Ausrichtung an der Basislinie.
-
- Dekl.: void vst_alignment( WORD handle, WORD hor_in, WORD vert_in,
- WORD *hor_out, WORD *vert_out );
- Aufruf: vst_alignment( handle, hor_in, vert_in, &hor_out, &vert_out );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 39 vst_alignment
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] hor_in gewünschte horizontale Ausrichtung
- intin[1] vert_in gewünschte vertikale Ausrichtung
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0] hor_out ausgewählte horizontale Ausrichtung
- intout[1] vert_out ausgewählte vertikale Ausrichtung
-
- Bedeutung von hor_in:
- 0: linksjustiert
- 1: zentriert
- 2: rechtsjustiert
-
- Bedeutung von vert_in:
- 0: Basislinie
- 1: Halblinie
- 2: Zeichenoberkante
- 3: Zeichenzellenunterkante
- 4: Zeichenunterkante
- 5: Zeichenzellenoberkante
-
-
- ∙ SET GRAPHIC TEXT SPECIAL EFFECTS (VDI 106)
-
- Mit "SET GRAPHIC TEXT SPECIAL EFFECTS" kann man, wie es der Name schon
- andeutet, spezielle Texteffekte einstellen.
-
- Dekl.: WORD vst_effects( WORD handle, WORD effect );
- Aufruf: set_effect = vst_effects( handle, effect );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 106 vst_effects
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] effect gewünschter Texteffekt
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_effect ausgewählter Texteffekt
-
- Bedeutung von effect (Bitnummer):
- 0: fett
- 1: hell
- 2: kursiv
- 3: unterstrichen
- 4: umrandet
-
-
- ∙ SET CHARACTER HEIGHT, POINTS MODE (VDI 107)
-
- Mit "SET CHARACTER HEIGHT, POINTS MODE" kann die Zeichenzellengrö₧e in Punkten
- (1 pt = 1/72") festgelegt werden.
- Bei Bitmapfonts sucht diese Funktion den Font heraus, der in einfacher oder
- doppelter Vergrö₧erung kleiner oder gleich der gewünschten Höhe ist. Bei
- Vektorfonts kann man mit vst_point() nur die vordefinierten Höhen anwählen (in
- der Regel sind das 8, 9, 10, 11, 12, 14, 18, 24, 36, und 48 pt).
-
- Dekl.: WORD vst_point( WORD handle, WORD point,
- WORD *char_width, WORD *char_height,
- WORD *cell_width, WORD *cell_height );
- Aufruf: set_point = vst_point( handle, point, &char_width, &char_height,
- &cell_width, &cell_height );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 107 vst_point
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] point gewünschte Zeichenzellenhöhe (1/72")
-
- Ausgaben:
-
- contrl[2] 2 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_point ausgewählte Zeichenzellenhöhe (1/72")
- ptsout[0] char_width ausgewählte Zeichenbreite
- ptsout[1] char_height ausgewählte Zeichenhöhe
- ptsout[2] cell_width ausgewählte Zeichenzellenbreite
- ptsout[3] cell_height ausgewählte Zeichenzellenhöhe
-
-
- ∙ INQUIRE TEXT EXTENT (VDI 116)
-
- Bei Bitmapfonts ermittelt "INQUIRE TEXT EXTENT" die minimalen Ausma₧e eines
- Rechtecks, das die übergebene Zeichenkette umrahmt. Bei Vektorfonts addiert
- diese Funktion nur die Schrittweiten ohne Pair- oder Track-Kerning und
- Zeichenüberhänge zu beachten.
- Die Koordinaten der vier Eckpunkte werden relativ zu einem Koordinatensystem
- ausgegeben, wobei die Punkte gegen den Uhrzeigersinn durchnummeriert sind. Der
- erste Punkt liegt ohne Textdrehung in der linken unteren Ecke des Textrechtecks.
-
- Dekl.: void vqt_extent( WORD handle, BYTE *string, WORD *extent );
- Aufruf: vqt_extent( handle, string, extent );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 116 vqt_extent
- contrl[1] 0 Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[6] handle
- intin[0..n-1] string[0..n-1] Zeichenkette
-
- Ausgaben:
-
- contrl[2] 4 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- ptsout[0..7] extent[0..7] Koordinaten des Textrechtecks
-
-
- ∙ INQUIRE CHARACTER CELL WIDTH (VDI 117)
-
- Bei Bitmapfonts lieferte diese Funktion die horizontalen Textausma₧e zurück.
- Wendet man sie auf einen Vektorfont an, wird für das Zeichen <index> die
- gerundete Schrittweite zurückgegeben. Diese Schrittweite kann nur im
- Zusammenhang mit v_gtext() benutzt werden. Versucht man die Schrittweiten auf
- v_ftext() anzuwenden wird man falsche Zeichenpositionen berechnen.
-
- Dekl.: WORD vqt_width( WORD handle, WORD index,
- WORD *cell_width, WORD *left_delta, WORD *right_delta );
- Aufruf: status = vqt_width( handle, index,
- &cell_width, &left_delta, &right_delta );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 117 vqt_width
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] character Zeichennummer
-
- Ausgaben:
-
- contrl[2] 3 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] status Zeichennummer oder -1 (Fehler)
- ptsout[0] cell_width Zeichenzellenbreite
- ptsout[2] left_delta linker Abstand zur Zeichenzelle
- ptsout[4] right_delta rechter Abstand zur Zeichenzelle
-
- Bemerkung:
- Um die Breite einer Zeichenkette zu ermitteln, ist der Aufruf von vqt_extent(),
- vqt_f_extent() oder vqt_real_extent() zu empfehlen.
- Wer feststellen möchte, ob ein Font äquidistant (monospaced) oder proportional
- ist, sollte nicht alle Zeichenpaare über vqt_width() vergleichen, sondern zuerst
- prüfen ob, vqt_name() hierüber Informationen zurückgibt.
-
-
- ∙ LOAD FONTS (VDI 119)
-
- Diese Funktion lädt die in ASSIGN.SYS für das mit <handle> bezeichnete Gerät
- eingetragenen Bitmapfonts und sorgt dafür, da₧ auch auf die Vektorfonts
- zugegriffen werden kann. Zurückgegeben wird die Anzahl der zusätzlich
- verfügbaren Zeichensätze.
-
- Bevor man vst_load_fonts() aufruft, sollte man mit vq_gdos() überprüfen, ob das
- VDI Zeichensätze nachladen kann.
-
- Dekl.: WORD vst_load_fonts( WORD handle, WORD select );
- Aufruf: additional = vst_load_fonts( handle, 0 );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 119 vst_load_fonts
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] select 0 (reserviert)
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] additional Anzahl der geladenen Zeichensätze
-
-
- ∙ UNLOAD FONTS (VDI 120)
-
- Der durch die Bitmapfonts belegte Speicher wird von "UNLOAD FONTS" freigegeben.
-
- Dekl.: void vst_unload_fonts( WORD handle, WORD select );
- Aufruf: vst_unload_fonts( handle, 0);
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 120 vst_unload_fonts
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- intin[0] select 0 (reserviert)
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ INQUIRE FACE NAME AND INDEX (VDI 130)
-
- In NVDI 3 gibt es eine erweiterte Form von vqt_name():
-
- Dekl.: WORD vqt_name( WORD handle, WORD index, BYTE *name, UWORD *font_format,
- UWORD *flags );
- Aufruf: id = vqt_name( handle, index, name, &font_format, &flags );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 130 vqt_name
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin, kein Tippfehler!
- contrl[5] 1 mehr Informationen liefern!
- contrl[6] handle
- intin[0] index Nummer (1 bis Maximalanzahl)
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 35 Einträge in intout
- intout[0] id Zeichensatznummer
- intout[1..16] name[0..15] Zeichensatzname
- intout[17..32] name[16..31] Zeichensatz-Attribute
- intout[33] name[32] 0: Bitmapfont, 1: Vektorfont
- intout[34] flags/font_format
-
- Im High-Byte von intout[34] wird <flags> zurückgeliefert:
- 0: Proportionalfont
- 1: äquidistanter Font
-
- Im Low-Byte von intout[34] wird <font_format> zurückgeliefert:
- 1: Bitmap-Font
- 2: Speedo-Font
- 4: TrueType-Font
- 8: Type 1-Font
-
- Bemerkungen:
- Um festzustellen, was für einen Font man vor sich hat, mu₧ man die Anzahl der
- Einträge in intout (contrl[4]) beachten. Ist contrl[4] 33, so sind keine
- zusätzlichen Informationen vorhanden und demzufolge mu₧ es sich um einen
- Bitmapfont handeln. Ist contrl[4] == 34, wird nur zusätzlich in intout[33]
- (name[32]) mitgeteilt, ob es sich um einen Vektorfont handelt. Nur wenn
- contrl[4] == 35 ist, kann man mit intout[34] (flags) den Fonttyp genauer
- feststellen und sofort erkennen, ob der Font äquidistant (monospaced) ist.
-
- intout[34] wird nur zurückgeliefert, wenn contrl[3] > 1 und contrl[5] = 1!
-
-
- ∙ INQUIRE CURRENT FACE INFORMATION (VDI 131)
-
- Es wird Auskunft über den aktuellen Zeichensatz gegeben, wobei die Attribute und
- Vergrö₧erung/Verkleinerung berücksichtigt werden.
-
- Dekl.: void vqt_fontinfo( WORD handle, WORD *minADE, WORD *maxADE,
- WORD *distances, WORD *maxwidth, WORD *effects );
- Aufruf: vqt_fontinfo( handle, &minADE, &maxADE, distances, &max_width, effects );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 131 vqt_fontinfo
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 5 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0] minADE niedrigste Zeichennummer
- intout[1] maxADE höchste Zeichennummer
- ptsout[0] maxwidth Maximale Zeichenzellenbreite
- ptsout[1] distances[0]
- ptsout[2] effects[0]
- ptsout[3] distances[1]
- ptsout[4] effects[1]
- ptsout[5] distances[2]
- ptsout[6] effects[2]
- ptsout[7] distances[3]
- ptsout[9] distances[4]
-
- Bedeutung von distances:
- distances[0]: Abstand von der Untergrenze der Zeichenzelle zur Basislinie
- distances[1]: Abstand der Unterlänge zur Basislinie
- distances[2]: Abstand der Halblinie zur Basislinie
- distances[3]: Abstand der Zeichenobergrenzze zur Basislinie
- distances[4]: Abstand der Zeichenzellenobergrenze zur Basislinei
-
- Bedeutung von effects:
- effects[0]: Verbreiterung bei Texteffekten
- effects[1]: linker Abstand bei Kursivschrift
- effects[2]: rechter Abstand bei Kursivschrift
-
-
- ∙ INQUIRE EXTENDED FONT INFORMATION (VDI 229)
-
- Die Funktion vqt_xfntinfo() liefert in einer XFNT_INFO-Struktur die mit <flags>
- angeforderten Informationen über einen Font. Wenn ein von 0 verschiedener Index
- übergeben wird, sucht vqt_xfntinfo() den entsprechenden Font und liefert die durch
- <flags> bezeichneten Einträge. Wenn <index> 0 ist, wird der Font mit der ID <id>
- gesucht. Sollte <id> ebenfalls 0 sein, werden Informationen über den bereits
- eingestellten Font zurückgegeben.
-
- Damit die Informationen in die XFNT_INFO-Struktur eingetragen werden, mu₧ die
- Grö₧e der Struktur mu₧ in das Strukturelement <size> eingetragen werden.
-
- Dekl.: WORD vqt_xfntinfo( WORD handle, WORD flags, WORD id, WORD index,
- XFNT_INFO *info );
- Aufruf: id = vqt_xfntinfo( handle, flags, id, index, &info );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 229 vqt_xfntinfo
- contrl[1] 0 Einträge in ptsin
- contrl[3] 5 Einträge in intin
- contrl[5] 0
- contrl[6] handle
- intin[0] flag Bitvektor für auszugebende Informationen
- intin[1] id ID des Fonts oder 0 für eingestellten Font
- intin[2] index Index des Fonts oder 0, wenn die ID benutzt
- werden soll
- intin[3..4] info Zeiger auf die XFNT_INFO-Struktur
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 3 Einträge in intout
- intout[0] font_format Fontformat
- intout[1] font_id ID des eingestellten Fonts
- intout[2] index Index des eingestellten Fonts
-
- Bedeutung von flags (Bitnummer):
- 0: vollständigen Fontnamen zurückgeben (font_name)
- 1: Name der Fontfamilie zurückgeben (family_name)
- 2: Stil des Fonts zurückgeben (style_name)
- 3: Dateinamen des Fonts zurückgeben (file_name1)
- 4: 2. optionalen Dateinamen zurückgeben (file_name2)
- 5: 3. optionalen Dateinamen zurückgeben (file_name3)
- 8: Höhen in pt ohne Vergrö₧erung zurückliefern (pt_cnt, pt_sizes)
- 9: Höhen in pt für doppelte Vergrö₧erung zurückliefern (pt_cnt, pt_sizes)
-
- Bedeutung von font_format:
- 1: Bitmap-Font
- 2: Speedo-Font
- 4: TrueType-Font
- 8: Type 1-Font
-
- Bit 8 und 9 von flags unterscheiden sich in der Funktion nur bei Bitmap-Fonts.
- Ist Bit 8 gesetzt, werden die Höhen geliefert, die ohne Vergrö₧erung vorhanden
- sind. Wenn Bit 9 gesetzt ist, werden die Höhen geliefert, bei denen vergrö₧ert
- wird.
-
- Beschreibung der XFNT_INFO-Struktur:
-
- typedef struct
- {
- LONG size; /* Länge der Struktur, mu₧ vor vqt_xfntinfo() gesetzt werden */
- WORD format; /* Fontformat, z.B. 4 für TrueType */
- WORD id; /* Font-ID, z.B. 6059 */
- WORD index; /* Index */
- BYTE font_name[50]; /* vollständiger Fontname, z.B. "Century 725 Italic BT" */
- BYTE family_name[50]; /* Name der Fontfamilie, z.B. "Century725 BT" */
- BYTE style_name[50]; /* Name des Fontstils, z.B. "Italic" */
- BYTE file_name1[200]; /* Name der 1. Fontdatei, z.B. "C:\FONTS\TT1059M_.TTF" */
- BYTE file_name2[200]; /* Name der optionalen 2. Fontdatei */
- BYTE file_name3[200]; /* Name der optionalen 3. Fontdatei */
- WORD pt_cnt; /* Anzahl der Punkthöhen für vst_point(), z.B. 10 */
- WORD pt_sizes[64]; /* verfügbare Punkthöhen,
- z.B. { 8, 9, 10, 11, 12, 14, 18, 24, 36, 48 } */
- } XFNT_INFO;
-
- Bei allen Zeichenketten in der XFNT_INFO-Struktur handelt es sich um C-Strings,
- die mit einem 0-Byte abgeschlossen sind. Strukturelemente, die nicht mit <flags>
- angefordert wurden, haben keinen definierten Inhalt.
-
-
- ∙ SET TEXT FACE BY NAME (VDI 230, 0)
-
- Diese Funktion sucht einen Font mit Namen <font_name> in einem der durch den
- Bitvektor <font_format> angegebenen Fontformate und stellt ihn ein. Fehlende
- oder überschüssige Leerzeichen werden bei der Suche ignoriert. Wenn in den
- angegebenen Fontformaten kein Font des gesuchten Namens vorhanden ist, wird der
- Systemfont gesetzt.
-
- Dekl.: WORD vst_name( WORD handle, WORD font_format,
- BYTE *font_name, BYTE *ret_name );
- Aufruf: id = vst_name( handle, font_format, font_name, ret_name );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 230 vst_name
- contrl[1] 0 Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[5] 0 Unterfunktionsnummer: Font einstellen
- contrl[6] handle
- intin[0] font_format zu berücksichtigende Fontformate
- intin[1..n] font_name[0..n-1] einzustellender Fontname
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] m Einträge in intout
- intout[0] id ID des eingestellten Fonts
- intout[1..m] ret_name[0..m-1] Name des eingestellten Fonts
-
- Bedeutung von font_format:
- 1: Bitmap-Font
- 2: Speedo-Font
- 4: TrueType-Font
- 8: Type 1-Font
-
-
- ∙ INQUIRE FACE NAME AND ID BY NAME (VDI 230, 100)
-
- Diese Funktion sucht einen Font mit Namen <font_name> in einem der durch den
- Bitvektor <font_format> angegebenen Fontformate, wobei fehlende oder
- überschüssige Leerzeichen ignoriert werden. Wenn der Font gefunden wird, werden
- Font-ID und Name in intout zurückgeliefert.
- Falls kein Font auffindbar ist, wird eine 0 in intout[0] zurückgeliefert, um
- einen Fehler zu signalisieren.
-
- Dekl.: WORD vqt_name_and_id( WORD handle, WORD font_format,
- BYTE *font_name, BYTE *ret_name );
- Aufruf: id = vqt_name_and_id( handle, font_format, font_name, ret_name );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 230 vst_name
- contrl[1] 0 Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[5] 100 Unterfunktionsnummer: Font suchen
- contrl[6] handle
- intin[0] font_format zu berücksichtigende Fontformate
- intin[1..n] font_name[0..n-1] einzustellender Fontname
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] m Einträge in intout
- intout[0] id ID des gefundenen Fonts oder 0
- intout[1..m] ret_name[0..m-1] Name des gefundenen Fonts
-
- Bedeutung von font_format:
- 1: Bitmap-Font
- 2: Speedo-Font
- 4: TrueType-Font
- 8: Type 1-Font
-
-
- ∙ SET CHARACTER WIDTH, ABSOLUTE MODE (VDI 231)
-
- Mit dieser Funktion kann man die Zeichenbreite in Pixeln setzen. Sobald der der
- nächste Aufruf von vst_height(), vst_point() oder vst_arbpt() erfolgt, wird die
- Breite wieder zurückgesetzt.
-
- Dekl.: void vst_width( WORD handle, WORD width, WORD *char_width,
- WORD *char_height, WORD *cell_width, WORD *cell_height );
- Aufruf: vst_width( handle, width, &char_width, &char_height,
- &cell_width, &cell_height );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 231 vst_width
- contrl[1] 1 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0] width gewünschte Zeichenbreite
-
- Ausgaben:
-
- contrl[2] 2 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- ptsout[0] char_width ausgewählte Zeichenbreite
- ptsout[1] char_height ausgewählte Zeichenhöhe
- ptsout[2] cell_width ausgewählte Zeichenzellenbreite
- ptsout[3] cell_height ausgewählte Zeichenzellenhöhe
-
- Bemerkungen:
- Zum Einstellen des Breiten-Höhen-Verhältnisses ist es sinnvoller, vst_setsize()
- aufzurufen, da diese Funktion feinere Einstellungen erlaubt.
-
-
- ∙ INQUIRE SPEEDO HEADER INFORMATION (VDI 232)
-
- Die Funktion vqt_fontheader() kopiert den Header des eingestellten Speedo-Fonts
- in einen Buffer und liefert, wenn vorhanden, einen Zeiger auf die dazugehörige
- TDF-Datei. Der übergebene Buffer sollte sicherheitshalber 1 Kb gro₧ sein, da die
- Länge des Speedo-Fontheader vom jeweiligen Font und möglichen
- Formaterweiterungen abhängt.
- Für andere Fontformate (TrueType, ...) wird versucht, den Header nachzubilden.
-
- Man sollte daran denken, da₧ für jeden Aufruf von vqt_fontheader() eventuell
- mehrfach auf die Festplatte zugegriffen werden mu₧ - bei 300 oder mehr Fonts
- kann das immerhin einige wenige Sekündchen dauern. Man sollte daher den häufigen
- Aufruf dieser Funktion vermeiden oder wichtige Angaben selbst speichern und beim
- Programmstart laden.
-
-
- Dekl.: void vqt_fontheader( WORD handle, void *buffer, BYTE *tdf_name );
- Aufruf: vqt_fontheader( handle, buffer, tdf_name );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 232 vqt_fontheader
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0..1] buffer Buffer für den Fontheader
-
- Ausgaben:
- contrl[2] 0 Einträge in ptsout
- contrl[4] n Länge des TDF-Pfads
- intout[0..n-1] tdf_name[0..n-1] absoluter Pfad und Name des TDFs
-
- Bemerkung:
-
- Für Programmierer dürften die folgenden Einträge des Fontheaders am
- interessantesten sein:
-
- Name Offset Länge Beschreibung
- FH_FNTNM 24 70 Name des Fonts (siehe auch vqt_name()),
- z.B. "Century 725 Italic BT"
- FH_NKTKS 258 2 Anzahl der Track-Kerning-Informationen
- FH_NKPRS 260 2 Anzahl der Kerning-Paare, (siehe auch vst_kern())
- FH_CLFGS 263 1 Klassifizierung, u.a. Italic und Monospace
- FH_SFNTN 266 32 Name des korrespondierenden Postscript-Fonts,
- z.B. "Century725BT-Italic"
- FH_SFACN 298 16 Kurzname der Fontfamilie, z.B. "Century725 BT"
- FH_FNTFM 314 14 Stil/Form, z.B. "Italic"
- FH_ITANG 328 2 Schrägstellung in 1/256-Grad (bei italic-Schnitten),
- z.B 4480 (17,5 Grad)
-
-
- ∙ INQUIRE TRACK KERNING INFORMATION (VDI 234)
-
- Diese Funktion liefert getrennt in x- und y- Richtung die pro Zeichen durch
- Track-Kerning entstehende Verschiebung zurück.
-
- Dekl.: void vqt_trackkern( WORD handle, fix31 *x_offset, fix31 *y_offset );
- Aufruf: vqt_trackkern( handle, &x_offset, &y_offset );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 234 vqt_trackkern
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
- contrl[2] 0 Einträge in ptsout
- contrl[4] 4 Einträge in intout
- intout[0..1] x_offset x-Verschiebung in 1/65536 Pixeln
- intout[2..3] y_offset y-Verschiebung in 1/65536 Pixeln
-
-
- ∙ INQUIRE PAIR KERNING INFORMATION (VDI 235)
-
- Die Funktion vqt_pairkern() liefert die zwischen zwei Zeichen durch Pair-Kerning
- entstehende Verschiebung zurück.
-
- Dekl.: void vqt_pairkern( WORD handle, WORD index1, WORD index2,
- fix31 *x_offset, fix31 *y_offset );
- Aufruf: vqt_pairkern( handle, index1, index2, &x_offset, &y_offset );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 235 vqt_pairkern
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] index1 erstes Zeichen
- intin[1] index2 darauf folgendes Zeichen
-
- Ausgaben:
- contrl[2] 0 Einträge in ptsout
- contrl[4] 4 Einträge in intout
- intout[0..1] x_offset x-Verschiebung in 1/65536 Pixeln
- intout[2..3] y_offset y-Verschiebung in 1/65536 Pixeln
-
-
- ∙ SET CHARACTER MAPPING MODE (VDI 236)
-
- Mit dieser Funktion kann man vom ASCII-Mapping auf direktes Mapping umschalten,
- d.h. man erhält z.B. für eine 65 nicht mehr das Zeichen A, sondern je nach
- verwendetem Font das Zeichen, das sich unter diesem Index verbirgt. Wenn man auf
- direktes Mapping umschaltet, ändert sich au₧erdem die Anzahl der vorhandenen
- Zeichen pro Font (minADE und maxADE bei vqt_fontinfo) von 256 auf die Zahl der
- tatsächlich vorhandenen Zeichen.
-
- Dekl.: void vst_charmap( WORD handle, WORD mode );
- Aufruf: void vst_charmap( handle, mode );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 236 vst_charmap
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] mode Zeichen-Mapping
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bedeutung von mode:
- 0: direktes Mapping, keine Umsetzung des Zeichen-Index
- 1: Zeichen-Index wird als ASCII-Wert interpretiert
-
- Bemerkungen:
- Man sollte, wenn man ASCII-Mapping einschalten will, nicht irgendeinen von 0
- verschiedenen Wert, sondern 1 übergeben, da es durchaus denkbar ist, da₧
- demnächst noch weitere Mappings (z.B. Unicode) vorhanden sind.
-
-
- ∙ SET KERNING MODE (VDI 237)
-
- Mit dieser Funktion kann man das gewünschte Track-Kerning und Pair-Kerning ein-
- oder ausschalten. Informationen für Track-Kerning sind in den meisten
- Speedo-Fonts enhalten. Normale TrueType-Fonts bieten kein Track-Kerning. Die
- neuen TrueType-GX-Fonts enthalten dagegen oftmals Daten für Track-Kerning.
-
- Dekl.: void vst_kern( WORD handle, WORD track_mode, WORD pair_mode,
- WORD *tracks, WORD *pairs );
- Aufruf: vst_kern( handle, track_mode, pair_mode, &track, &pairs );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 237 vst_kern
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] track_mode Track-Kerning-Modus
- intin[1] pair_mode Pair-Kerning aus oder ein
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0] track das gesetzte Track-Kerning
- intout[1] pairs Anzahl der Kerning-Paare
-
- Bedeutung von track_mode:
- 0: kein Track-Kerning
- 1: normal
- 2: tight
- 3: very tight
-
- Bedeutung von pair_mode:
- 0: kein Pair-Kerning
- 1: Pair-Kerning benutzen
-
- Bemerkungen:
- Mit NVDI kann man ein selbstdefiniertes Track-Kerning einstellen. Der
- Track-Modus (track_mode) wird dafür auf 255 gesetzt, der gewünschte zusätzliche
- Abstand in 1/65536 Pixeln wird in intin[2..3] eingetragen und contrl[3] mu₧ eine
- 4 enthalten.
-
- Dekl.: void vst_track_offset( WORD handle, fix31 offset, WORD pair_mode,
- WORD *tracks, WORD *pairs );
- Aufruf: vst_track_offset( handle, offset, pair_mode, &tracks, &pairs );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 237 vst_kern
- contrl[1] 0 Einträge in ptsin
- contrl[3] 4 Einträge in intin
- contrl[6] handle
- intin[0] 255 benutzerdefiniert
- intin[1] pair_mode Pair-Kerning aus oder ein
- intin[2..3] offset Abstand
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0] track das gesetzte Track-Kerning
- intout[1] pairs Anzahl der Kerning-Paare
-
-
- ∙ GET CHARACTER BITMAP INFORMATION (VDI 239)
-
- Diese Funktion liefert den Zeiger auf die zu einem Zeichen gehörende Bitmap und
- deren Ma₧e zurück. Die zurückgelieferten Offsets sind auch im Zusammenhang mit
- v_getoutline() gültig.
-
- Dekl.: void v_getbitmap_info( WORD handle, WORD index,
- fix31 *x_advance, fix31 *y_advance,
- fix31 *x_offset, fix31 *y_offset,
- WORD *width, WORD *height, WORD *bitmap );
- Aufruf: v_getbitmap_info( handle, index, &x_advance, &y_advance,
- &x_offset, &y_offset, &width, &height, bitmap );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 239 v_getbitmap_info
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] index Zeichen-Index
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 12 Einträge in intout
- intout[0] width Breite der Bitmap
- intout[1] height Höhe der Bitmap
- intout[2..3] x_advance x-Abstand in 1/65536 Pixeln
- intout[4..5] y_advance y-Abstand in 1/65536 Pixeln
- intout[6..7] x_offset x-Verschiebung in 1/65536 Pixeln
- intout[8..9] y_offset y-Verschiebung in 1/65536 Pixeln
- intout[10..11] bitmap Zeiger auf die Bitmap
-
- Bedeutung von x_advance, y_advance:
- Dieser Advance-Vektor gibt den Abstand des nächsten Zeichens in 1/65536 Pixeln an.
-
- Bedeutung von x_offset, y_offset:
- x_offset und y_offset geben den Abstand der Bitmap zur Position der Zeichenzelle
- an. Das ist nötig, da die Bitmap meistens kleiner als die Zeichenzelle ist (z.B.
- bei Zeichen ohne Unterlängen).
-
- Bemerkungen:
- Um auch ohne NVDI 3 nachvollziehbare Ausgaben zu bekommen, sollten die
- Texteffekte (vst_effects()) ausgeschaltet sein (einige Versionen eines
- Zusatzprogrammes für Vektorfonts zeigen sonst sehr unterschiedlich Ergebnisse).
- Da der Zeiger auf die Bitmap in der Regel in den Zeichen-Cache verweist, sollte
- man sich die Bitmap direkt nach dem Aufruf kopieren (AES-Kontextswitch durch
- wind_update() verhindern!!) - andernfalls könnte der Zeiger schon wieder
- ungültig sein.
- Au₧erdem sollte man v_getbitmap_info() nicht für enorm gro₧e Zeichen (z.B. 300
- pt und mehr) aufrufen, da diese je nach Cache-Grö₧e evtl. nicht mehr komplett
- aufgebaut werden können. Die Bitmap enthält in diesem Fall nur einen Teil des
- Zeichens.
-
- Man sollte diese Funktion nicht mi₧brauchen, um eine eigene Textausgabe zu
- bauen - es lohnt sich nicht und Pair-Kerning wäre auch nicht möglich.
-
-
- ∙ INQUIRE OUTLINE FONT TEXT EXTENT (VDI 240)
-
- Ebenso wie bei vqt_extent() werden hier die Zeichenweiten addiert. Diese
- Funktion beachtet aber Track- und Pair-Kerning und arbeitet intern mit 1/65536
- Pixeln, d.h. erst bei der Umrechnung in Koordinaten wird gerundet. Texteffekte
- wie z.B. Neigung über vst_skew() werden ebenso wie linke und rechte Überhänge
- nicht beachtet.
-
- Dekl.: void vqt_f_extent( WORD handle, BYTE *string, WORD *extent );
- Aufruf: vqt_f_extent( handle, string, extent );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 240 vqt_fextent
- contrl[1] 0 Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[6] handle
- intin[0..n-1] string[0..n-1] Zeichenkette
-
- Ausgaben:
-
- contrl[2] 4 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- ptsout[0..7] extent[0..7] Koordinaten des Textrechtecks
-
- Fallen:
- Aus Kompatibilitätsgründen verhält sich diese Funktion bei 90, 180 und 270 Grad
- genauso unsinnig wie das alte vqt_extent() - der Bezugspunkt wird geändert!
-
- Bemerkungen:
- Diese Funktion liefert nicht das den Text umgebende Rechteck. Sie addiert nur
- die Schrittweiten und beachtet auch nicht linke oder rechte Zeichenüberhänge.
- Sie ist im Prinzip nur zur Cursor-Positionierung gedacht. Wer aber mit dieser
- Funktion die Grö₧e eines neuzuzeichenenden Bildbereichs ermitteln möchte, mu₧
- links und rechts sicherheitshalber die Breite des grö₧ten Zeichens hinzuaddieren
- (und die Neigung beachten). Unter NVDI 3 empfiehlt sich stattdessen die
- Verwendung von vqt_real_extent().
-
-
- ∙ INQUIRE REAL OUTLINE FONT TEXT EXTENT (VDI 240, 4200)
-
- Diese Funktion wird z.Zt. nur von NVDI bereitgestellt.
- Es wird das umgebende Viereck (es mu₧ sich nicht immer um ein Rechteck handeln)
- für Textausgabe an der Stelle x,y zurückgeliefert. Dabei werden sämtliche
- Texteffekte, Rotation, Schrägstellung, Pair-Kerning, Track-Kerning,
- Zeichenüberhänge, horizontale und vertikale Ausrichtung berücksichtigt.
-
- Dekl.: void vqt_real_extent( WORD handle, WORD x, WORD y, BYTE *string,
- WORD *extent );
- Aufruf: vqt_real_extent( handle, x, y, string, extent )
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 240 vqt_fextent
- contrl[1] 1 Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[5] 4200 Unterfunktionsnummer
- contrl[6] handle
- ptsin[0] x x-Koordinate
- ptsin[1] y y-Koordinate
- intin[0..n-1] string[0..n-1] Zeichenkette
-
- Ausgaben:
-
- contrl[2] 4 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- ptsout[0..7] extent[0..7] Koordinaten des umgebenden Textrechtecks
-
-
- ∙ OUTLINE FONT TEXT (VDI 241)
-
- Diese Textausgabefunktion beachtet im Gegensatz zu v_gtext() Pair- und
- Track-Kerning und berechnet intern die Zeichenpositionen in 1/65536 Pixeln,
- wodurch eine bessere Zeichenpositionierung gewährleistet wird.
-
- Dekl.: void v_ftext( WORD handle, WORD x, WORD y, BYTE *string );
- Aufruf: v_ftext( handle, x, y, string );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 241 v_ftext
- contrl[1] 1 Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[6] handle
- intin[0..n-1] string[0..n-1] Zeichenkette
- ptsin[0] x
- ptsin[1] y
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Es gibt für v_ftext() noch eine weitere Variante, bei der man für jedes Zeichen
- den Abstand zum Vorgänger selbst bestimmen kann:
-
- Dekl.: void v_ftext_offset( WORD handle, WORD x, WORD y, BYTE *string, WORD *offset );
- Aufruf: v_ftext_offset( handle, x, y, string, offset );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 241 v_ftext
- contrl[1] 1+n Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[6] handle
- intin[0..n-1] string[0..n-1] Zeichenkette
- ptsin[0] x
- ptsin[1] y
- ptsin[2] offset[0] x-Offset des ersten Zeichens
- ptsin[3] offset[1] y-Offset des ersten Zeichens
- ptsin[4..2*n+1] xyoff[2..(2*n)-1] x-Offset, y-Offset der folgenden Zeichen
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ Get Character outline (VDI 243)
-
- Die Funktion v_getoutline() generiert aus einem Zeichen einen Bezierzug, mit dem
- man v_bez() oder v_bezfill() aufrufen kann.
-
- Dekl.: void v_getoutline( WORD handle, WORD index, WORD *xyarr, BYTE *bezarr,
- WORD max_pts, WORD *count );
- Aufruf: v_getoutline( handle, index, xyarr, bezarr, max_pts, &count );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 243 v_getoutline
- contrl[1] 0 Einträge in ptsin
- contrl[3] 6 Einträge in intin
- contrl[6] handle
- intin[0] index Zeichen-Index
- intin[1] max_pts Maximale auszugebende Punktanzahl
- intin[2..3] xyarray Buffer für die Koordinaten
- intin[4..5] bezarray Buffer für Punktinformationen (jump, bez)
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- intout[0] count Anzahl der ausgegebenen Punkte
-
- Bemerkungen:
- Wenn man die Informationen von v_getoutline() z.B. als Vektorgrafik benutzen
- möchte, so empfiehlt es sich, vor dem Aufruf eine gro₧e Texthöhe einzustellen.
- Andernfalls ist die Qualität des zurückgelieferten Beziers recht mager, da von
- der internen Darstellung in 1/65536 Pixeln auf Pixel gerundet wird, d.h. 16 Bit
- fallen weg.
-
-
- ∙ SET CHARACTER HEIGHT BY ARBITRARY POINTS (VDI 246)
-
- Ähnlich wie vst_point() kann man mit dieser Funktion die Zeichenhöhe in Punkten
- setzen. Man ist aber nicht an die Standard-Grö₧en gebunden, sondern kann die
- Höhe in 1/65536 Punkten (pt) anwählen. Wenn man negative Grö₧en einstellt,
- werden die Zeichen and der x-Achse gespiegelt.
-
- Dekl.: fix31 vst_arbpt( WORD handle, fix31 height,
- WORD *char_width, WORD *char_height,
- WORD *cell_width, WORD *cell_height );
- Aufruf: set_point = vst_arbpt( handle, height, &char_width, &char_height,
- &cell_width, &cell_height );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 246 vst_arbpt
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0..1] height Höhe in 1/65536 Punkten
-
- Ausgaben:
-
- contrl[2] 2 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0..1] set_point eingestellte Höhe in 1/65536 Punkten
- ptsout[0] char_width ausgewählte Zeichenbreite
- ptsout[1] char_height ausgewählte Zeichenhöhe
- ptsout[2] cell_width ausgewählte Zeichenzellenbreite
- ptsout[3] cell_height ausgewählte Zeichenzellenhöhe
-
- Bemerkungen:
- Bei den zurückgelieferten Zeichenbreiten handelt es sich um gerundete Werte, die
- man nicht ohne weiteres zur Breitenberechnung benutzen kann.
-
-
- ∙ INQUIRE OUTLINE FONT TEXT ADVANCE PLACEMENT VECTOR (VDI 247)
-
- Diese Funktion liefert für ein Zeichen x- und y-Komponente für die
- Positionierung des folgenden Zeichens (es handelt sich nicht um die Breite des
- Zeichens!).
-
- Dekl.: void vqt_advance( WORD handle, WORD index,
- fix31 *x_advance, fix31 *y_advance );
- Aufruf: vqt_advance( handle, index, &x_advance, &y_advance );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 247 vqt_advance
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] index Zeichen-Index
-
- Ausgaben:
-
- contrl[2] 4 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- ptsout[0] x_adv_old x-Abstand in Pixeln
- ptsout[1] y_adv_old y-Abstand in Pixeln
- ptsout[2] x_rem_old x-Nachkommarest (mod 16384)
- ptsout[3] y_rem_old y-Nachkommarest (mod 16384)
- ptsout[4..5] x_advance x-Abstand in 1/65536 Pixeln
- ptsout[6..7] y_advance y-Abstand in 1/65536 Pixeln
-
- Bemerkungen:
- Die Werte in ptsout[0..3] werden nur noch aus Kompatibilitätsgründen
- zurückgliefert. Stattdessen sollten x_advance und y_advance im genaueren
- fix31-Format benutzt werden.
- Es handelt sich bei x_advance und y_advance nur um den Abstand, der für die
- Positionierung des nächsten Zeichens benutzt wird, d.h. x_advance beinhaltet
- keine Zeichenüberhänge.
-
-
- ∙ FLUSH OUTLINE FONT CACHE (VDI 251)
-
- Diese Funktion löscht die Fontcaches - Prädikat besonders wertvoll :-)
-
-
- ∙ SET CHARACTER CELL WIDTH BY ARBITRARY POINTS (VDI 252)
-
- Vst_setsize() setzt die Zeichenbreite in 1/65536 Punkten (pt). Die Zeichenbreite
- wird beim nächsten Aufruf von vst_height(), vst_point oder vst_arbpt() wieder
- zurückgesetzt. Bei negativen Breiten werden die Zeichen an der y-Achse gespiegelt.
-
- Dekl.: fix31 vst_setsize( WORD handle, fix31 width,
- WORD *char_width, WORD *char_height,
- WORD *cell_width, WORD *cell_height );
- Aufruf: set_width = vst_setsize( handle, width, &char_width, &char_height,
- &cell_width, &cell_height );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 252 vst_setsize
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0..1] width Zeichenbreite in 1/65536 Punkten
-
- Ausgaben:
-
- contrl[2] 2 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0..1] set_width eingestellte Breite in 1/65536 Punkten
- ptsout[0] char_width ausgewählte Zeichenbreite
- ptsout[1] char_height ausgewählte Zeichenhöhe
- ptsout[2] cell_width ausgewählte Zeichenzellenbreite
- ptsout[3] cell_height ausgewählte Zeichenzellenhöhe
-
-
- ∙ SET OUTLINE FONT SKEW (VDI 253)
-
- Mit dieser Funktion können Zeichen unabhängig von vst_effects() in
- 1/10-Grad-Schritten zwischen -90 und +90 Grad geneigt werden. Wie überall im VDI
- sind auch hier die Winkel entgegen dem Uhrzeigersinn gerichtet. Positive Winkel
- führen zu einer Neigung nach links, wogegen negative Winkel Zeichen nach rechts
- neigen.
-
- Dekl.: WORD vst_skew( WORD handle, WORD skew );
- Aufruf: set_skew = vst_skew( handle, skew );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 253 vst_skew
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] skew Neigung in 1/10-Grad
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_skew eingestellte Neigung in 1/10-Grad
-
- Bemerkungen:
- Diese Funktion ist zwar eine ganz nette Spielerei, aber die erzeugten Zeichen
- sehen grundsätzlich schlechter aus als ein richtiger italic-Font.
-
-
-
-
- Rasterfunktionen
- ================
-
- ∙ COPY RASTER, OPAQUE (VDI 109)
-
- "COPY RASTER, OPAQUE" kopiert pixelweise ein rechteckiges Raster auf ein anderes
- rechteckiges Raster. Hierbei werden die angegebenen logischen Verknüpfungen
- beachtet. Beide Raster müssen entweder im gerätespezifischen Format vorliegen
- oder dürfen nur 1 Ebene haben.
-
- Immer dann, wenn der Bildschirm (oder das Gerät, das durch <handle> angesprochen
- wird), Quelle oder Ziel einer Rasteroperation ist, sollte fd_addr des MFDB auf
- NULL gesetzt sein!
-
- Im Zielraster wird nur geclippt, wenn fd_addr des Ziel-MFDBs NULL ist!
-
- Das Quellraster wird (bisher) nicht geclippt!
-
- Dekl.: void vro_cpyfm( WORD handle, WORD vr_mode, WORD *xyarr,
- MFDB *src_MFDB, MFDB *des_MFDB );
- Aufruf: vro_cpyfm( handle, wr_mode, xyarr, &src_MFDB, &des_MFDB );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 109 vro_cpyfm
- contrl[1] 4 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- contrl[7..8] src_MFDB Zeiger auf den MFDB des Quellrasters
- contrl[9..10] des_MFDB Zeiger auf den MFDB des Zielrasters
- intin[0] wr_mode logische Verknüpfung
- ptsin[0..7] xyarr[0..7] Koordinaten
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bedeutung von wr_mode (logische Verknüpfungen):
- 0: Ergebnis=0
- 1: Ergebnis=Quelle and Ziel
- 2: Ergebnis=Quelle and (not Ziel)
- 3: Ergebnis=Quelle
- 4: Ergebnis=(not Quelle) and Ziel
- 5: Ergebnis=Ziel (sinnlos!)
- 6: Ergebnis=Quelle xor Ziel
- 7: Ergebnis=Quelle or Ziel
- 8: Ergebnis=not (Quelle or Ziel)
- 9: Ergebnis=not (Quelle xor Ziel)
- 10: Ergebnis=not Ziel
- 11: Ergebnis=Quelle or (not Ziel)
- 12: Ergebnis=not Quelle
- 13: Ergebnis=(not Quelle) or Ziel
- 14: Ergebnis=not (Quelle and Ziel)
- 15: Ergebnis=1
-
- Bedeutung von xyarr:
- xyarr[0..3]: Koordinaten des Quellrechtecks
- xyarr[4..7]: Koordinaten des Zielrechtecks
-
-
- ∙ COPY RASTER, TRANSPARENT (VDI 121)
-
- Diese Funktion expandiert unter Berücksichtigung von Vorder -und
- Hintergrundfarbe sowie des Schreibmodus ein zweifarbiges (aus einer Ebene
- bestehendes) Quellraster zu einem mehrfarbigen Zielraster.
-
- Ebenso wie bei vro_cpyfm() sollte auch bei vrt_cpyfm() fd_addr 0 sein, wenn der
- Bildschirm Ziel einer Rasteroperation ist!
-
- Dekl.: void vrt_cpyfm( WORD handle, WORD wr_mode, WORD *xyarr,
- MFDB *src_MFDB, MFDB *des_MFDB, WORD *color_index );
- Aufruf: vrt_cpyfm( handle, wr_mode, xyarr, &src_MFDB, &des_MFDB, color_index );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 121 vrt_cpyfm
- contrl[1] 4 Einträge in ptsin
- contrl[3] 3 Einträge in intin
- contrl[6] handle
- contrl[7..8] src_MFDB Zeiger auf den MFDB des Quellrasters
- contrl[9..10] des_MFDB Zeiger auf den MFDB des Zielrasters
- intin[0] wr_mode Schreibmodus
- intin[1] color_index[0] Farbindex der gesetzten Punkte
- intin[2] color_index[1] Farbindex der gelöschten Punkte
- ptsin[0..7] xyarr[0..7] Koordinaten
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bedeutung von xyarr:
- xyarr[0..3]: Koordinaten des Quellrechtecks
- xyarr[4..7]: Koordinaten des Zielrechtecks
-
-
- ∙ TRANSFORM FORM (VDI 110)
-
- Diese Funktion transformiert ein Raster vom Standardformat ins gerätespezifische
- Format und umgekehrt. Die Transformation kann "in place" geschehen, d.h. beide
- MFDBs zeigen auf den gleichen Speicherbereich - in diesem Fall dauert aber
- gerade das Transformieren gro₧er Blöcke ewig.
-
- Dekl.: void vr_trnfm( WORD handle, MFDB *src_MFDB, MFDB *des_MFDB );
- Aufruf: vr_trnfm( handle, &src_MFDB, &des_MFDB );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 110 vr_trnfm
- contrl[1] 0 Einträge in ptsin
- contrl[2] 0 Einträge in ptsout
- contrl[3] 0 Einträge in intin
- contrl[4] 0 Einträge in intout
- contrl[6] handle
- contrl[7...8] psrcMFDB Zeiger auf den MFDB des Quellrasters
- contrl[9...10] pdesMFDB Zeiger auf den MFDB des Zielrasters
-
-
- ∙ GET PIXEL (VDI 105)
-
- Für bis zu 8 Farbebenen (256 gleichzeitig darstellbare Farben) ermittelt "GET
- PIXEL" den Zustand (gelöscht/gesetzt) und die Farbe eines Pixels.
-
- Bei HiColor (15- oder 16-Bit) enthält pel den Pixelwert und index ist (meistens)
- -1, da er nicht einwandfrei zuzuordnen ist.
-
- Bei TrueColor enthält pel das Low-Word des Pixelwerts und index das High-Word.
-
- Dekl.: void v_get_pixel( WORD handle, WORD x, WORD y, WORD *pel, WORD *index );
- Aufruf: v_get_pixel( handle, x, y, &pel, & index );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 105 v_get_pixel
- contrl[1] 1 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0] x
- ptsin[1] y
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0] pel Pixelwert
- intout[1] index Farbindex des Pixels
-
-
- Rasteroperationen bei Off-Screen-Bitmaps:
-
- Rasteroperationen zwischen Bildschirm und Off-Screen-Bitmap sollten
- grundsätzlich im gerätespezifischen Format erfolgen.
- Wenn als Ziel einer Rasteroperation eine Off-Screen-Bitmap mit ihrem MFDB
- angegeben wird und wenn das zu dieser Bitmap gehörende Handle benutzt wird, so
- wird beim Transfer anhand der über vs_clip() auf dieser Workstation
- eingestellten Koordinaten geclippt. Für das Kopieren eines Rasters vom
- Bildschirm in eine Off-Screen-Bitmap sollte man also das VDI-Handle dieser
- Bitmap benutzen.
- Ist die Bitmap dagegen Quelle und der Bildschirm Ziel, so sollte man das Handle
- der Bildschirm-Workstaion benutzen, da dann das Raster anhand der
- Bildschirm-Koordinaten abgeclippt wird. Wenn man das von v_opnbm()
- zurückgelieferte Handle einer Bitmap benutzt und in fd_addr in einem MFDB 0
- enthält, so werden die Daten der Bitmap statt dessen benutzt.
-
-
-
-
- Eingabefunktionen
- =================
-
- Die Eingabefunktionen ermöglichen einem Programm, unter Berücksichtigung der
- Eingabemodi Tastatur und Maus abzufragen. Au₧erdem bieten sie Routinen zum
- einenklinken in Timer- und Maus- Interrupts.
-
- Diese Funktionen sind primär für den Eigner der physikalischen Workstation, d.h.
- für das AES gedacht. Applikationen sollten, sofern es keine zwingenden Gründe
- für ein anderes Vorgehen gibt, Maus- und Tastaturereignisse immer durch die
- Event-Funktionen des AES abfragen, da andernfalls für andere Applikationen
- bestimmte Eingaben abgefangen werden.
-
-
- ∙ SET INPUT MODE (VDI 33)
-
- Mit "SET INPUT MODE" kann man für ein bestimmtes Eingabegerät den Eingabemodus
- festlegen.
-
- Dekl.: void vsin_mode( WORD handle, WORD dev_type, WORD mode );
- Aufruf: vsin_mode( handle, dev_type, mode );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 33 vsin_mode
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] dev_type Eingabeeinheit
- intin[1] mode gewünschter Eingabemodus
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] set_mode ausgewählter Eingabemodus
-
- Bedeutung von dev_type:
- 1: Maus
- 2: Cursor
- 3: Funktionstasten
- 4: Tastatur
-
- Bedeutung von mode:
- REQUEST MODE 1: Eingabeeinheit abfragen und sofort den Eingabewert und den
- Status zurückgeben.
- SAMPLE MODE 2: Warten bis eine Eingabe erfolgt und dann den Eingabewert
- zurückgeben.
-
-
- ∙ INPUT LOCATOR, REQUEST MODE (VDI 28)
-
- Mit dieser Funktion wird die Position des Mauszeigers ermittelt und eine neue
- Position übergeben. Der Mauszeiger wird erst nach Druck einer Maustaste neu
- positioniert.
-
- Dekl.: void vrq_locator( WORD handle, WORD x, WORD y, WORD *xout,
- WORD *yout, WORD *term );
- Aufruf: vrq_locator( handle, x, y, &xout, &yout, &term );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 28 vrq_locator
- contrl[1] 1 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0] x neue x-Koordinate des Mauszeigers
- ptsin[1] y neue y-Koordinate des Mauszeigers
-
- Ausgaben:
-
- contrl[2] 1 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] term Maustastenstatus+31
- ptsout[0] xout alte x-Koordinate des Mauszeigers
- ptsout[1] yout alte y-Koordinate des Mauszeigers
-
-
- ∙ INPUT LOCATOR, SAMPLE MODE (VDI 28)
-
- Mit dieser Funktion wird die Position des Mauszeigers ermittelt und eine neue
- Position übergeben. Tastenbetätigungen oder Mausposition werden nur dann
- gemeldet, wenn sie wirklich erfolgt sind.
-
- Dekl.: WORD vsm_locator( WORD handle, WORD x, WORD y, WORD *xout,
- WORD *yout, WORD *term );
- Aufruf: status = vsm_locator( handle, x, y, &xout, &yout, &term );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 28 vsm_locator
- contrl[1] 1 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- ptsin[0] x neue x-Koordinate des Mauszeigers
- ptsin[1] y neue y-Koordinate des Mauszeigers
-
- Ausgaben:
-
- contrl[2] 0 oder 1 Einträge in ptsout
- contrl[4] 0 oder 1 Einträge in intout
- intout[0] term Maustastenstatus+31
- ptsout[0] xout alte x-Koordinate des Mauszeigers
- ptsout[1] yout alte y-Koordinate des Mauszeigers
-
- Bedeutung von status (gebildet aus (contrl[4]<<1)|contrl[2]) (Bitnummer):
- 0: Positionsveränderung
- 1: Tastendruck
-
-
- ∙ INPUT CHOICE, REQUEST MODE (VDI 30)
-
- Mit dieser Funktion wird die Betätigung einer Funktionstaste abgewartet und
- die Tastennummer (1-10) zurückgegeben.
-
- Dekl.: void vrq_choice( WORD handle, WORD ch_in, WORD *ch_out );
- Aufruf: vrq_choice( handle, ch_in, &ch_out );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 30 vrq_choice
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] ch_in initialisierende Taste (0)
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] ch_out ausgewählte Funktionstaste
-
-
- ∙ INPUT CHOICE, SAMPLE MODE (VDI 30)
-
- Sofern eine Funktionstaste betätigt wurde, gibt dieser Funktion die
- Tastennummer (1-10) zurück.
-
- Dekl.: WORD vsm_choice( WORD handle, WORD *choice );
- Aufruf: status = vsm_choice( handle, &choice );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 30 vsm_choice
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 oder 1 Einträge in intout
- intout[0] choice Tastennummer
-
- Bedeutung von status (contrl[4]):
- 0: kein Tastendruck
- 1: Tastendruck erfolgt
-
-
- ∙ INPUT STRING,REQUEST MODE (VDI 31)
-
- Diese Funktion gibt eine Zeichenkette von der Tastatur zurück, wenn RETURN
- gedrückt oder die maximale Länge erreicht wird.
-
- Dekl.: void vrq_string( WORD handle, WORD max_length, WORD echo_mode,
- WORD *echo_xy, BYTE *string );
- Aufruf: vrq_string( handle, max_length, echo_mode, echo_xy, string );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 31 vrq_string
- contrl[1] 1 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] max_length maximale Länge der Zeichenkette
- intin[1] echo_mode 0: keine Ausgabe, 1: Ausgabe
- ptsin[0] echo_xy[0]
- ptsin[1] echo_xy[1]
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] n Einträge in intout
- intout[0..n-1] string[0..n-1] Eingabepuffer
-
- Bedeutung von max_length:
- max_length gibt die maximale Länge der Zeichenkette an. Ist max_length negativ,
- so wird der Absolutbetrag als Länge betrachtet, und statt der ASCII-Codes werden
- Scan-Codes übergeben.
-
-
- ∙ INPUT STRING,SAMPLE MODE (VDI 31)
-
- Diese Funktion gibt eine Zeichenkette von der Tastatur zurück, wenn RETURN
- gedrückt oder die maximale Länge erreicht wird. Sofern keine Eingaben gemacht
- werden, bricht die Funktion ab.
-
- Dekl.: WORD vsm_string( WORD handle, WORD max_length, WORD echo_mode,
- WORD *echo_xy, BYTE *string );
- Aufruf: status = vsm_string( handle, max_length, echo_mode, echo_xy, string );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 31 vsm_string
- contrl[1] 1 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[6] handle
- intin[0] max_length maximale Länge der Zeichenkette
- intin[1] echo_mode 0: keine Ausgabe, 1: Ausgabe
- ptsin[0] echo_xy[0]
- ptsin[1] echo_xy[1]
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] n Einträge in intout
- intout[0..n-1] string[0..n-1] Eingabepuffer
-
- Bedeutung von max_length:
- max_length gibt die maximale Länge der Zeichenkette an. Ist max_length
- negativ, so wird der Absolut-Betrag als Länge benutzt und statt der ASCII-
- Codes werden Scan-Codes übergeben.
-
- Bedeutung von status (contrl[4]):
- 0: keine Eingabe
- <> 0: Länge der Zeichenkette
-
-
- ∙ SET MOUSE FORM (VDI 111)
-
- Das Aussehen des Mauszeigers kann mit "SET MOUSE FORM" frei definiert werden.
-
- Dekl.: void vsc_form( WORD handle, WORD *cursor );
- Aufruf: vsc_form( handle, cursor );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 111 vsc_form
- contrl[1] 0 Einträge in ptsin
- contrl[3] 37 Einträge in intin
- contrl[6] handle
- intin[0..36] cursor[0..36] Mauszeigerdefinition
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bedeutung von cursor:
- pcur_form[0]: relative Koordinate des horizontalen Aktionspunktes
- pcur_form[1]: relative Koordinate des vertikalen Aktionspunktes
- pcur_form[2]: mu₧ 1 sein (REPLACE)
- pcur_form[3]: Farbindex der Hintergrundmaske
- pcur_form[4]: Farbindex der Vordergrundmaske
- pcur_form[5..20]: Hintergrundmaske
- pcur_form[21..36]: Vordergrundmaske
-
- Bemerkung:
- Zum Setzen der Mausform sollte in GEM-Programmen unbedingt die AES-Funktion
- graf_mouse() verwendet werden. Andernfalls wird die Mausform-Verwaltung des AES
- nachhaltig verwirrt.
-
- Mit NVDI ist es möglich, die aktuelle Mausform zurückgeliefert zu bekommen.
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 111 vgc_form
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 37 Einträge in intout
- intout[0..36] cursor[0..36] Mauszeigerdefinition
-
-
- ∙ INQUIRE INPUT MODE (VDI 115)
-
- Diese Funktion ermittelt den Eingabemodus eines Gerätes.
-
- Dekl.: void vqin_mode( WORD handle, WORD dev_type, WORD *input_mode );
- Aufruf: vqin_mode( handle, dev_type, &input_mode );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 115 vqin_mode
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] dev_type Gerätenummer (siehe vsin_mode)
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[1] input_mode Eingabe-Modus
-
-
- ∙ EXCHANGE TIMER INTERRUPT VECTOR (VDI 118)
-
- Mit dieser Funktion kann man eine eigene Routine im Timerinterrupt (etv_timer)
- aufrufen lassen. Diese Routine mu₧ an ihrem Ende alle veränderten Register
- restaurieren und die alte Timerinterruptroutine anspringen.
-
- Dekl.: void vex_timv( WORD handle, void *tim_addr, void **otim_addr,
- WORD *tim_conv );
- Aufruf: vex_timv( handle, tim_addr, &otim_addr, &tim_conv );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 118 vex_timv
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- contrl[7..8] tim_addr Adresse der neuen Interruptroutine
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- contrl[9..10] otim_addr Adresse der alten Interruptroutine
- intout[0] tim_conv Interruptintervall in ms
-
-
- ∙ SHOW CURSOR (VDI 122)
-
- Mit "SHOW CURSOR" wird ein vorhergehender "HIDE CURSOR"-Aufruf aufgehoben. Wenn
- man den Mauszeiger sofort erscheinen lassen möchte, mu₧ der Parameter <reset>
- Null sein.
-
- Dekl.: void v_show_c( WORD handle, WORD reset );
- Aufruf: v_show_c( handle, reset );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 122 v_show_c
- contrl[1] 0 Einträge in ptsin
- contrl[3] 1 Einträge in intin
- contrl[6] handle
- intin[0] reset
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bedeutung von reset:
- 0: Mauszeiger sofort anzeigen
- <> 0: Hide-Counter dekrementieren und gegebenenfalls Mauszeiger zeichnen
-
- Bemerkung:
- Zum Ein-/Ausschalten der Maus sollte in GEM-Programmen unbedingt die
- AES-Funktion graf_mouse() verwendet werden.
-
-
- ∙ HIDE CURSOR (VDI 123)
-
- Diese Funktion schaltet den Mauszeiger aus.
-
- Dekl.: void v_hide_c( WORD handle );
- Aufruf: v_hide_c( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 123 v_hide_c
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
- Bemerkung:
- Zum Ein-/Ausschalten der Maus sollte in GEM-Programmen unbedingt die
- AES-Funktion graf_mouse() verwendet werden.
-
-
- ∙ SAMPLE MOUSE BUTTON STATE (VDI 124)
-
- Diese Funktion gibt Informationen über die Mauszeiger-Position und den Status
- der Maustasten zurück.
-
- Dekl.: void vq_mouse( WORD handle, WORD *status, WORD *x, WORD *y );
- Aufruf: vq_mouse( handle, &status, &x, &y );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 124 vq_mouse
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 1 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] status Maustastenstatus
- ptsout[0] x
- ptsout[1] y
-
- Bedeutung von status:
- 0: keine Maustaste gedrückt
- 1: linke Maustaste gedrückt
- 2: rechte Maustaste gedrückt
- 3: beide Maustasten gedrückt
-
- Bemerkung:
- In GEM-Programmen sollte die AES-Funktion graf_mkstate() verwendet werden, um
- nur die für die eigene Applikation bestimmten Informationen über Position und
- Status der Maustastenstatus zu erhalten.
-
-
- ∙ EXCHANGE BUTTON CHANGE VECTOR (VDI 125)
-
- Mit "EXCHANGE BUTTON CHANGE VECTOR" kann man eine Routine installieren, die beim
- Druck einer Maustaste aufgerufen wird und in Register d0.w den Status der
- Maustasten erthält. Diese Routine mu₧ alle veränderten Register wiederherstellen
- und die alte Maustasten-Status-Routine aufrufen.
-
- Dekl.: void vex_butv( WORD handle, void *pusrcode, void **psavcode );
- Aufruf: vex_butv( handle, pusrcode, &psavcode );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 125 vex_butv
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- contrl[7..8] pusrcode Adresse der neuen Routine
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- contrl[9..10] psavcode Adresse der alten Routine
-
-
- ∙ EXCHANGE MOUSE MOVEMENT VECTOR (VDI 126)
-
- Diese Funktion erlaubt im Fall von Mausbewegungen den Aufruf einer Anwender-
- Routine, der in d0.w und d1.w die Koordinaten des Mauszeigers übergeben werden.
- Alle veränderten Register müssen von dieser Routine restauriert werden.
- Anschlie₧end sollte die alte Mausbewegungsroutine aufgerufen werden.
-
- Dekl.: void vex_motv( WORD handle, void *pusrcode, void **psavcode );
- Aufruf: vex_motv( handle, pusrcode, &psavcode );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 126 vex_motv
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- contrl[7..8] pusrcode Adresse der neuen Routine
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- contrl[9..10] psavcode Adresse der alten Routine
-
-
- ∙ EXCHANGE CURCOR CHANGE VECTOR (VDI 127)
-
- Mit "EXCHANGE CURSOR CHANGE VECTOR" kann man eine Routine installieren, die bei
- Mausbewegungen aufgerufen wird. Der Aufruf dieser Routine erfolgt, nachdem die
- über vex_motv() eingetragene Routine aufgerufen und die Mauszeiger-Koordinaten,
- die man in d0.w und d1.w erhält, geclippt wurden. Alle veränderten Register
- müssen wiederhergestellt werden. Anschlie₧end sollte die alte Routine aufgerufen
- werden.
-
- Dekl.: void vex_curv( WORD handle, void *pusrcode, void **psavcode );
- Aufruf: vex_curv( handle, pusrcode, &psavcode );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 127 vex_curv
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
- contrl[7..8] pusrcode Adresse der neuen Routine
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
- contrl[9..10] psavcode Adresse der alten Routine
-
-
- ∙ SAMPLE KEYBOARD STATE INFORMATION (VDI 128)
-
- Diese Funktion gibt den Status der CONTROL-, ALTERNATE- sowie der SHIFT-
- Taste(n) zurück.
-
- Dekl.: void vq_key_s( WORD handle, WORD *status );
- Aufruf: vq_key_s( handle, &status );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 128 vq_key_s
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 1 Einträge in intout
- intout[0] pstatus Tastenstatus
-
- Bedeutung von pstatus (Bitnummer):
- 0: rechte Shift-Taste
- 1: linke Shift-Taste
- 2: Control-Taste
- 3: Alternate-Taste
-
- Bemerkung:
- In GEM-Programmen sollten die AES Event-Funktionen verwendet werden, um nur die
- für die eigene Applikation bestimmten Informationen über den Tastaturstatus zu
- erhalten.
-
-
-
-
- Textmodus und VT52
- ==================
-
- ∙ INQUIRE ADDRESSABLE ALPHA CHARACTER CELLS (VDI 5, ESCAPE 1)
-
- Diese Funktion gibt über die Anzahl der Zeilen und Spalten des Textbildschirmes
- Auskunft. Wenn <rows> und <colums> 0 sind, gibt es auf dem Gerät keinen
- Textmodus.
-
- Dekl.: void vq_chcells( WORD handle, WORD *rows, WORD *columns );
- Aufruf: vq_chcells( handle, &rows, &columns );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 1 vq_chcells
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0] rows Zeilenanzahl
- intout[1] columns Spaltenanzahl
-
-
- ∙ EXIT ALPHA MODE (VDI 5, ESCAPE 2)
-
- "EXIT ALPHA MODE" schaltet den Textmodus aus.
-
- Dekl.: void v_exit_cur( WORD handle );
- Aufruf: v_exit_cur( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 2 v_exit_cur
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ENTER ALPHA MODE (VDI 5, ESCAPE 3)
-
- Mit dieser Funktion gelangt man in den Textmodus. Der Bildschirm wird gelöscht
- und der Text-Cursor in die linke obere Ecke gesetzt.
-
- Dekl.: void v_enter_cur( WORD handle );
- Aufruf: v_enter_cur( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 3 v_enter_cur
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ALPHA CURSOR UP (VDI 5, ESCAPE 4)
-
- Der Text-Cursor wird von dieser Funktion eine Zeile nach oben bewegt. Sofern er
- sich in der obersten Zeile befindet, geschieht nichts.
-
- Dekl.: void v_curup( WORD handle );
- Aufruf: v_curup( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 4 v_curup
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ALPHA CURSOR DOWN (VDI 5, ESCAPE 5)
-
- Der Text-Cursor wird um eine Zeile nach unten bewegt. Befindet sich der Cursor
- in der untersten Zeile, so passiert nichts.
-
- Dekl.: void v_curdown( WORD handle );
- Aufruf: v_curdown( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 5 v_curdown
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ALPHA CURSOR RIGHT (VDI 5, ESCAPE 6)
-
- "ALPHA CURSOR RIGHT" bewegt den Text-Cursor nach rechts, wobei am Zeilenende
- nichts geschieht.
-
- Dekl.: void v_curright( WORD handle );
- Aufruf: v_curright( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 6 v_curright
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ALPHA CURSOR LEFT (VDI 5, ESCAPE 7)
-
- Der Text-Cursor wird von dieser Funktion nach links bewegt. Es passiert nichts,
- wenn er sich bereits am Zeilenanfang befinden sollte.
-
- Dekl.: void v_curleft( WORD handle );
- Aufruf: v_curleft( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 7 v_curleft
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ HOME ALPHA CURSOR (VDI 5, ESCAPE 8)
-
- Von dieser Funktion wird der Text-Cursor in die linke obere Ecke gesetzt.
-
- Dekl.: void v_curhome( WORD handle );
- Aufruf: v_curhome( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 8 v_curhome
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ERASE TO END OF ALPHA SRCEEN (VDI 5, ESCAPE 9)
-
- Der Bildschirm wird von der aktuellen Cursor-Position ab gelöscht.
-
- Dekl.: void v_eeos( WORD handle );
- Aufruf: v_eeos( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 9 v_eeos
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ ERASE TO END OF ALPHA TEXT LINE (VDI 5, ESCAPE 10)
-
- Diese Funktion löscht ab der Cursor-Position die aktuelle Zeile.
-
- Dekl.: void v_eeol( WORD handle );
- Aufruf: v_eeol( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 10 v_eeol
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ DIRECT ALPHA CURSOR ADDRESS (VDI 5, ESCAPE 11)
-
- Mit "DIRECT ALPHA CURSOR ADDRESS" kann der Text-Cursor direkt positioniert
- werden.
-
- Dekl.: void v_curaddress( WORD handle, WORD row, WORD column );
- Aufruf: v_curadress( handle, row, column );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 2 Einträge in intin
- contrl[5] 11 v_curaddress
- contrl[6] handle
- intin[0] row Zeile
- intin[1] column Spalte
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ OUTPUT CURSOR ADDRESSABLE ALPHA TEXT (VDI 5, ESCAPE 12)
-
- Diese Funktion gibt an der aktuellen Cursor-Position eine Zeichenkette aus.
-
- Dekl.: void v_curtext( WORD handle, BYTE *string );
- Aufruf: v_curtext( handle, string );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] n Einträge in intin
- contrl[5] 12 v_curtext
- contrl[6] handle
- intin[0..n-1] string[0..n-1] Zeichenkette
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ REVERSE VIDEO ON (VDI 5, ESCAPE 13)
-
- Diese Funktion schaltet auf inverse Textausgabe um.
-
- Dekl.: void v_rvon( WORD handle );
- Aufruf: v_rvon( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 13 v_rvon
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ REVERSE VIDEO OFF (VDI 5, ESCAPE 14)
-
- Die inverse Textausgabe wird ausgeschaltet.
-
- Dekl.: void v_rvoff( WORD handle );
- Aufruf: v_rvoff( handle );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 14 v_rvoff
- contrl[6] handle
-
- Ausgaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 0 Einträge in intout
-
-
- ∙ INQUIRE CURRENT ALPHA CURCOR ADDRESS (VDI 5, ESCAPE 15)
-
- Von dieser Funktion wird die Position des Text-Cursors zurückgegeben.
-
- Dekl.: void vq_curaddress( WORD handle, WORD *row, WORD *column );
- Aufruf: vq_curaddress( handle, &row, &column );
-
- Variable Belegung Bedeutung
- Eingaben:
-
- contrl[0] 5 ESCAPE
- contrl[1] 0 Einträge in ptsin
- contrl[3] 0 Einträge in intin
- contrl[5] 15 vq_curaddress
- contrl[6] handle
-
- Augaben:
-
- contrl[2] 0 Einträge in ptsout
- contrl[4] 2 Einträge in intout
- intout[0] row Zeile
- intout[1] column Spalte
-
-
-
-
- Beispiele für Bindings
- ======================
-
- Diese Beispiel-Bindings gehen davon aus, da₧ <pb>, <contrl>, <intin>, <ptsin>,
- <intout> und <ptsout> global definiert sind. Die Funktion vdi() ist als
- void vdi( VDIPB *pb ) definiert. WORD, UWORD usw. sind normalerweise in PORTAB.H
- definiert, fix31 sollte als LONG definiert werden.
-
- /* Strukturdefinitionen */
-
- typedef struct
- {
- void *fd_addr; /* Adresse des Rasters oder 0 für Bildschirm/Bitmap */
- WORD fd_w; /* Breite des Rasters in Pixeln */
- WORD fd_h; /* Höhe des Rasters in Zeilen */
- WORD fd_wdwidth; /* Breite einer Rasterzeile in Worten */
- WORD fd_stand; /* Format 0: gerätespezifisch, 1: Standardformat */
- WORD fd_nplanes; /* Anzahl der Ebenen */
- WORD fd_r1; /* reserviert, sollte 0 sein */
- WORD fd_r2; /* reserviert, sollte 0 sein */
- WORD fd_r3; /* reserviert, sollte 0 sein */
- } MFDB;
-
- typedef struct
- {
- WORD red; /* Rot-Intensität in Promille (0-1000) */
- WORD green; /* Grün-Intensität in Promille (0-1000) */
- WORD blue; /* Blau-Intensität in Promille (0-1000) */
- } RGB1000;
-
- typedef struct
- {
- LONG size; /* Länge der Struktur, mu₧ vor vqt_xfntinfo() gesetzt werden */
- WORD format; /* Fontformat, z.B. 4 für TrueType */
- WORD id; /* Font-ID, z.B. 6059 */
- WORD index; /* Index */
- BYTE font_name[50]; /* vollständiger Fontname, z.B. "Century 725 Italic BT" */
- BYTE family_name[50]; /* Name der Fontfamilie, z.B. "Century725 BT" */
- BYTE style_name[50]; /* Name des Fontstils, z.B. "Italic" */
- BYTE file_name1[200]; /* Name der 1. Fontdatei, z.B. "C:\FONTS\TT1059M_.TTF" */
- BYTE file_name2[200]; /* Name der optionalen 2. Fontdatei */
- BYTE file_name3[200]; /* Name der optionalen 3. Fontdatei */
- WORD pt_cnt; /* Anzahl der Punkthöhen für vst_point(), z.B. 10 */
- WORD pt_sizes[64]; /* verfügbare Punkthöhen,
- z.B. { 8, 9, 10, 11, 12, 14, 18, 24, 36, 48 } */
- } XFNT_INFO;
-
- /* Funktionsprototypen */
- void vdi_str_to_c( UWORD *src, UBYTE *des, WORD len );
- WORD c_str_to_vdi( UBYTE *src, UWORD *des );
- WORD fix31_to_pixel( fix31 a );
- void vs_color( WORD handle, WORD index, RGB1000 *rgb_in );
- WORD vq_color( WORD handle, WORD color_index, WORD flag, RGB1000 *rgb_out );
- WORD vs_calibrate( WORD handle, WORD flag, RGB1000 *table );
- WORD vq_calibrate( WORD handle, WORD *flag );
- void v_opnbm( WORD *work_in, MFDB *bitmap, WORD *handle, WORD *work_out );
- void v_clsbm( WORD handle );
- void vq_scrninfo( WORD handle, WORD *work_out );
- WORD vq_devinfo2( WORD handle, WORD device, WORD *dev_exists, BYTE *file_name, BYTE *real_name );
- WORD vq_ext_devinfo( WORD handle, WORD device, WORD *dev_exists,
- BYTE *file_path, BYTE *file_name, BYTE *name );
- WORD vqt_name( WORD handle, WORD index, BYTE *name, UWORD *font_format, UWORD *flags );
- void vst_width( WORD handle, WORD width, WORD *char_width, WORD *char_height,
- WORD *cell_width, WORD *cell_height );
- void vst_track_offset( WORD handle, fix31 offset, WORD pair_mode, WORD *tracks, WORD *pairs );
- void vqt_real_extent( WORD handle, WORD x, WORD y, BYTE *string, WORD *extent );
- WORD vqt_xfntinfo( WORD handle, WORD flags, WORD id, WORD index, XFNT_INFO *info );
- WORD vst_name( WORD handle, WORD font_format, BYTE *font_name, BYTE *ret_name );
- WORD vqt_name_and_id( WORD handle, WORD font_format, BYTE *font_name, BYTE *ret_name );
-
- /* VDI-String in einen C-String umwandeln */
- void vdi_str_to_c( UWORD *src, UBYTE *des, WORD len )
- {
- while ( len > 0 )
- {
- *des++ = (UBYTE) *src++; /* nur das Low-Byte kopieren */
- len--;
- }
- *des++ = 0; /* Ende des Strings */
- }
-
- /* C-String in einen VDI-String umwandeln */
- WORD c_str_to_vdi( UBYTE *src, UWORD *des )
- {
- WORD len;
-
- while (( *des++ = *src++ ) != 0 )
- len++;
-
- return( len ); /* Länge des Strings ohne Null-Byte */
- }
-
- /* Positionsangabe in fix31-Darstellung in Pixel-Koordinate umrechnen */
- WORD fix31_to_pixel( fix31 a )
- {
- WORD b;
-
- b = (WORD) (( a + 32768L ) >> 16 ); /* runden !! */
- return( b ); /* Pixelwert zurückgeben */
- }
-
- void vs_color( WORD handle, WORD index, RGB1000 *rgb_in )
- {
- intin[0] = index;
- intin[1] = rgb_in->red;
- intin[2] = rgb_in->green;
- intin[3] = rgb_in->blue;
-
- contrl[0] = 14;
- contrl[1] = 0;
- contrl[3] = 4;
- contrl[5] = 0;
- contrl[6] = handle;
-
- vdi( &pb );
- }
-
- WORD vq_color( WORD handle, WORD color_index, WORD flag, RGB1000 *rgb_out )
- {
- intin[0] = color_index;
- intin[1] = flag;
-
- contrl[0] = 26;
- contrl[1] = 0;
- contrl[3] = 2;
- contrl[5] = 0;
- contrl[6] = handle;
-
- vdi( &pb );
-
- *rgb_out = *(RGB1000 *) (intout + 1);
- return( intout[0] );
- }
-
- WORD vs_calibrate( WORD handle, WORD flag, RGB1000 *table )
- {
- *(RGB1000 **)intin = table;
- intin[2] = flag;
-
- contrl[0] = 5;
- contrl[1] = 0;
- contrl[3] = 3;
- contrl[5] = 76;
- contrl[6] = handle;
-
- vdi( &pb );
-
- return( intout[0] );
- }
-
- WORD vq_calibrate( WORD handle, WORD *flag )
- {
- contrl[0] = 5;
- contrl[1] = 0;
- contrl[3] = 0;
- contrl[5] = 77;
- contrl[6] = handle;
-
- vdi( &pb );
-
- if ( contrl[4] > 0 )
- {
- *flag = intout[0];
- return( 1 );
- }
- else
- {
- *flag = 0
- return( 0 );
- }
- }
-
- void v_opnbm( WORD *work_in, MFDB *bitmap, WORD *handle, WORD *work_out )
- {
- /* Wenn work_in[15..19] 0 enthalten, wird eine Bitmap im gerätespezifischen
- Format oder mit nur 1 Ebene erzeugt (hängt vom MFDB ab). Anderfalls wird
- versucht eine Bitmap mit der Farbanzahl <work_in[15..16]>, <work_in[17]>
- Ebenen, dem Pixelformat <work_in[18]> und der Bitreihenfolge <work_in[19]>
- anzulegen. Falls kein passender Offscreen-Treiber vorhanden ist, kann die
- Bitmap nicht geöffnet werden.
- */
-
- pb[1] = work_in;
- pb[3] = work_out;
- pb[4] = work_out + 45;
-
- contrl[0] = 100;
- contrl[1] = 0;
- contrl[3] = 20;
- contrl[5] = 1;
- *(MFDB *)&contrl[7] = bitmap;
-
- vdi( &pb );
-
- *handle = contrl[6];
- pb[1] = intin;
- pb[3] = intout;
- pb[4] = ptsout;
- }
-
- void v_clsbm( WORD handle )
- {
- contrl[0] = 101;
- contrl[1] = 0;
- contrl[3] = 0;
- contrl[5] = 1;
- contrl[6] = handle;
- vdi( &pb );
- }
-
- void vq_scrninfo( WORD handle, WORD *work_out )
- {
- pb[3] = work_out;
-
- intin[0] = 2;
- contrl[0] = 102;
- contrl[1] = 0;
- contrl[3] = 1;
- contrl[5] = 1;
- contrl[6] = handle;
-
- vdi( &pb );
-
- pb[3] = intout;
- }
-
- WORD vq_devinfo2( WORD handle, WORD device, WORD *dev_exists, BYTE *file_name, BYTE *real_name )
- {
- contrl[0] = 248; /* Funktionsnummer */
- contrl[1] = 0;
- contrl[3] = 1; /* ID wird übergeben */
- contrl[5] = 0;
- contrl[6] = handle;
- intin[0] = device; /* Gerät */
-
- vdi( &pb );
-
- *dev_exists = 0; /* Treiber ist nicht vorhanden */
- *file_name = 0;
- *real_name = 0;
-
- if ( contrl[4] && intout[0] ) /* Treiber vorhanden? */
- {
- WORD i;
- WORD len;
-
- *dev_exists = 1; /* Treiber ist vorhanden */
-
- for ( i = 0; i < contrl[4]; i++ )
- {
- *file_name = (BYTE) intout[i];
- if ( *file_name == ' ' ) /* Trennung durch Leerzeichen? */
- {
- /* letztes Leerzeichen? */
- if (( i < contrl[4] ) && ( intout[i+1] != ' ' ))
- {
- *file_name = '.'; /* Leerzeichen ersetzen */
- file_name++;
- }
- }
- else
- file_name++;
- }
- *file_name++ = 0; /* Endeeeee */
-
- if (( contrl[2] == 1 ) && ( contrl[1] > 0 )) /* !?+*~"▌)%/(^= */
- len = contrl[1];
- else
- len = contrl[2] - 1;
-
- for ( i = 1; i <= len; i++ ) /* Klartextnamen kopieren */
- *((WORD *)real_name)++ = ptsout[i];
- *real_name++ = 0; /* sicherheitshalber */
- }
-
- return( ptsout[0] ); /* Treiber geöffnet oder nicht */
- }
-
- WORD vq_ext_devinfo( WORD handle, WORD device, WORD *dev_exists,
- BYTE *file_path, BYTE *file_name, BYTE *name )
- {
- intin[0] = device;
- *(BYTE **)&intin[1] = file_path;
- *(BYTE **)&intin[3] = file_name;
- *(BYTE **)&intin[5] = name;
-
- contrl[0] = 248;
- contrl[1] = 0;
- contrl[3] = 7;
- contrl[5] = 4242;
- contrl[6] = handle;
-
- vdi( &pb );
-
- *dev_exists = intout[0];
- return( intout[1] );
- }
-
- WORD vqt_name( WORD handle, WORD index, BYTE *name, UWORD *font_format, UWORD *flags )
- {
- intin[0] = index;
- intin[1] = 0;
-
- contrl[0] = 130;
- contrl[1] = 0;
- contrl[3] = 2;
- contrl[5] = 1;
- contrl[6] = handle;
-
- vdi( &pb );
-
- vdi_str_to_c( (UWORD *)&intout[1], (UBYTE *) name, 31 );
-
- if ( contrl[4] <= 34 )
- {
- *flags = 0;
- *font_format = 0;
- if ( contrl[4] == 33 )
- name[32] = 0;
- else
- name[32] = (BYTE) intout[33];
- }
- else
- {
- name[32] = intout[33];
- *flags = (intout[34] >> 8) & 0xff;
- *font_format = intout[34] & 0xff;
- }
-
- return( intout[0] );
- }
-
- void vst_width( WORD handle, WORD width, WORD *char_width, WORD *char_height,
- WORD *cell_width, WORD *cell_height );
- {
- ptsin[0] = width;
-
- contrl[0] = 231;
- contrl[1] = 1;
- contrl[3] = 0;
- contrl[5] = 0;
- contrl[6] = handle;
-
- vdi( &pb );
-
- *char_width = ptsout[0];
- *char_height = ptsout[1];
- *cell_width = ptsout[2];
- *cell_height = ptsout[3];
- }
-
- void vst_track_offset( WORD handle, fix31 offset, WORD pair_mode, WORD *tracks, WORD *pairs )
- {
- contrl[0] = 237;
- contrl[1] = 0;
- contrl[3] = 4;
- contrl[6] = handle;
-
- intin[0] = 255;
- intin[1] = pair_mode;
- *(fix31 *)&intin[2] = offset;
-
- vdi( &pb );
-
- *tracks = intout[0];
- *pairs = intout[1];
- }
-
- void vqt_real_extent( WORD handle, WORD x, WORD y, BYTE *string, WORD *extent )
- {
- WORD len;
- WORD i;
-
- ptsin[0] = x;
- ptsin[1] = y;
-
- len = c_str_to_vdi( (UBYTE *) string, (UWORD *) intin );
-
- contrl[0] = 240;
- contrl[1] = 1;
- contrl[3] = len;
- contrl[5] = 4200;
- contrl[6] = handle;
-
- vdi( &pb );
-
- for ( i = 0; i < 8; i++ )
- *extent++ = ptsout[i];
- }
-
- WORD vqt_xfntinfo( WORD handle, WORD flags, WORD id, WORD index, XFNT_INFO *info )
- {
- info->size = (LONG) sizeof( XFNT_INFO );
-
- intin[0] = flag;
- intin[1] = id;
- intin[2] = index;
- *(XFNT_INFO **)&intin[3] = info;
-
- contrl[0] = 229;
- contrl[1] = 0;
- contrl[3] = 5;
- contrl[5] = 0;
- contrl[6] = handle;
-
- vdi( &pb );
-
- return( intout[1] );
- }
-
- WORD vst_name( WORD handle, WORD font_format, BYTE *font_name, BYTE *ret_name )
- {
- WORD len;
-
- intin[0] = font_format;
- len = c_str_to_vdi( (UBYTE *) font_name, (UWORD *)&intin[1] );
-
- contrl[0] = 230;
- contrl[1] = 0;
- contrl[3] = 1 + len;
- contrl[5] = 0;
- contrl[6] = handle;
-
- vdi( &pb );
-
- if ( ret_name )
- vdi_str_to_c( (UWORD *)&intout[1], ret_name, contrl[4] );
-
- return( intout[0] );
- }
-
- WORD vqt_name_and_id( WORD handle, WORD font_format, BYTE *font_name, BYTE *ret_name )
- {
- WORD len;
-
- intin[0] = font_format;
- len = c_str_to_vdi( (UBYTE *) font_name, (UWORD *) intin + 1 );
-
- contrl[0] = 230;
- contrl[1] = 0;
- contrl[3] = 1 + len;
- contrl[5] = 100;
- contrl[6] = handle;
-
- vdi( &pb );
-
- if ( ret_name )
- vdi_str_to_c( (UWORD *)&intout[1], ret_name, contrl[4] );
-
- return( intout[0] );
- }
-
-
-